现在的位置: 首页 > 综合 > 正文

ASP.NET&Spring.NET&NHibernate最佳实践(十七)——第4章权限子系统(10)

2012年10月22日 ⁄ 综合 ⁄ 共 7570字 ⁄ 字号 评论关闭
用户服务接口
using System;
using System.Collections;
using Guushuuse.SalaryPrj.Security.DomainModel;
using Guushuuse.SalaryPrj.Security.Dao;
using System.Web.Security;

namespace Guushuuse.SalaryPrj.Security.Service
{
    
/// <summary>
    
/// 用户服务接口
    
/// </summary>

    public interface IUserService
    
{
        
int ChangePasswordQuestionAndAnswer(string applicationName, string username, string newPasswordQuestion, string newPasswordAnswer);
        
void CreateUser(User user);
        
void DeleteUser(User user);
        
int DeleteUser(string applicationName, string username, bool deleteAllRelatedData);
        IList FindUsersByEmail(
string applicationName, string emailToMatch, int pageIndex, int pageSize, out int totalRecords);
        IList FindUsersByName(
string applicationName, string usernameToMatch, int pageIndex, int pageSize, out int totalRecords);
        IList GetAllUsers(
string applicationName, int pageIndex, int pageSize, out long totalRecords);
        
int GetNumberOfUsersOnline(string applicationName, int minutesSinceLastInActive, DateTime currentTimeUtc);
        
string GetPassword(string applicationName, string username, string passwordAnswer, bool requiresQuestionAndAnswer, int maxInvalidPasswordAttempts, int passwordAttemptWindow, out MembershipPasswordFormat passwordFormat, out int status, DateTime currentTimeUtc);
        User GetUser(
int userID);
        User GetUserByName(
string applicationName, string username, bool updateLastActivity, DateTime currentTimeUtc);
        User GetUserByName(
string applicationName, string username);
        User GetUserByUserID(
int userID, bool updateLastActivity, DateTime currentTimeUtc);
        IList GetUsersByEmail(
string applicationName, string email);
        
int ResetPassword(string applicationName, string username, string newPassword, int maxInvalidPasswordAttempts, int passwordAttemptWindow, string passwordSalt, MembershipPasswordFormat passwordFormat, string passwordAnswer, DateTime currentTimeUtc);
        
int UnlockUser(string applicationName, string username);
        
int UpdatePassword(string applicationName, string username, string newPassword, string passwordSalt, MembershipPasswordFormat passwordFormat, DateTime currentTimeUtc);
        
int UpdateUser(string applicationName, string username, string email, string comment, bool isApproved, DateTime lastLoginDate, DateTime lastActivityDate, bool uniqueEmail);
        
void UpdateUser(Guushuuse.SalaryPrj.Security.DomainModel.User user);
        
int UpdateUserInfo(string applicationName, string username, bool isPasswordCorrect, int passwordAttemptWindow, int maxInvalidPasswordAttempts, bool updateLastLoginActivityDate, DateTime currentTimeUtc);
        IUserDao UserDao 
getset; }
    }

}

用户服务类(UserService.cs)

using System;
using System.Collections.Generic;
using System.Text;
using Guushuuse.SalaryPrj.Security.Dao;
using Spring.Transaction.Interceptor;
using Guushuuse.SalaryPrj.Security.DomainModel;
using System.Collections;
using System.Web.Security;

namespace Guushuuse.SalaryPrj.Security.Service
{
    
/// <summary>
    
/// 用户服务类
    
/// </summary>

    public class UserService : IUserService
    
{
        
private IUserDao _userDao;

        
public IUserDao UserDao
        
{
            
get return _userDao; }
            
set { _userDao = value; }
        }


        [Transaction(ReadOnly 
= false)]
        
public void CreateUser(User user)
        
{
            _userDao.CreateUser(user);
        }


        [Transaction(ReadOnly 
= false)]
        
public void UpdateUser(User user)
        
{
            _userDao.UpdateUser(user);
        }


        [Transaction(ReadOnly 
= false)]
        
public void DeleteUser(User user)
        
{
            _userDao.DeleteUser(user);
        }


        
public User GetUser(int userID)
        
{
            
return _userDao.GetUser(userID);
        }


        
public User GetUserByName(string applicationName, string username)
        
{
            Application application 
= ServiceLocator.ApplicationService.GetApplication(applicationName);

            
return _userDao.GetUser(application, username); ;
        }



        
public User GetUserByName(string applicationName, string username, bool updateLastActivity, DateTime currentTimeUtc)
        
{
            Application application 
= ServiceLocator.ApplicationService.GetApplication(applicationName);

            User user 
= _userDao.GetUser(application, username);

            
if (user != null)
            
{
                
if (updateLastActivity)
                
{
                    user.LastActivityDate 
= currentTimeUtc;

                    UpdateUser(user);
                }


                
return user;
            }

            
else
            
{
                
return null;
            }

        }


        
public IList GetUsersByEmail(string applicationName, string email)
        
{
            Application application 
= ServiceLocator.ApplicationService.GetApplication(applicationName);

            
return _userDao.GetUsers(application, email);
        }


        
public int UpdatePassword(string applicationName, string username, string newPassword, string passwordSalt,
            MembershipPasswordFormat passwordFormat, DateTime currentTimeUtc)
        
{
            Application application 
= ServiceLocator.ApplicationService.GetApplication(applicationName);

            User user 
= _userDao.GetUser(application, username);

            
if (user != null)
            
{
                user.Password 
= newPassword;
                user.PasswordSalt 
= passwordSalt;
                user.PasswordFormat 
= passwordFormat;
                user.LastPasswordChangedDate 
= currentTimeUtc;

                UpdateUser(user);

                
return 0;
            }

            
else
            
{
                
return 1;
            }


        }


        
public int ResetPassword(string applicationName, string username, string newPassword, int maxInvalidPasswordAttempts,
            
int passwordAttemptWindow, string passwordSalt, MembershipPasswordFormat passwordFormat, string passwordAnswer, DateTime currentTimeUtc)
        
{
            Application application 
= ServiceLocator.ApplicationService.GetApplication(applicationName);

            User user 
= _userDao.GetUser(application, username);

            
if (user != null)
            
{
                
if (!user.IsLockedOut)
                
{
                    
if (passwordAnswer == null || passwordAnswer.ToLower().Equals(user.PasswordAnswer))
                    
{
                        user.Password 
= newPassword;
                        user.PasswordFormat 
= passwordFormat;
                        user.PasswordSalt 
= passwordSalt;
                        user.LastPasswordChangedDate 
= currentTimeUtc;
                        user.FailedPasswordAnswerAttemptCount 
= 0;
                        user.FailedPasswordAnswerAttemptWindowStart 
= new DateTime(175411);

                        UpdateUser(user);

                        
return 0;
                    }

                    
else
                    
{
                        
if (currentTimeUtc > user.FailedPasswordAnswerAttemptWindowStart.AddMinutes(passwordAttemptWindow))
                        
{
                            user.FailedPasswordAnswerAttemptCount 
= 1;
                            user.FailedPasswordAnswerAttemptWindowStart 
= currentTimeUtc;
                        }

                        
else
                        
{
                            user.FailedPasswordAnswerAttemptCount
++;
                            user.FailedPasswordAnswerAttemptWindowStart 
= currentTimeUtc;
                        }


                        
if (user.FailedPasswordAnswerAttemptCount > maxInvalidPasswordAttempts)

抱歉!评论已关闭.