个人觉得除了RoleProvider 以外,这套方案有过度设计的嫌疑。接口函数冗余度很大,且扩展很麻烦,要用到无数相关的类,而一般我只用到这么几个接口函数:
MembershipProvider.ValidateUser(...)
RoleProvider.GetAllRoles(...)
RoleProvider.GetRolesForUser(...)
RoleProvider.AddUsersToRoles(...)
至于ProfileProvider,它的本意是保存用户的扩展信息,但它的结构设计导致数据库批量查询的时候很麻烦,另外接口代码也无比复杂,实在提不起用它的念头。大家有没有什么好的建议或方法(尤其是保存用户扩展信息的方法),请各位博友不啻指教。
注,以下是我原项目采用的用户角色认证的方案,感觉用起来比较方便。这次想迁移到标准方案,发现困难重重,故看大家有什么好的建议。此外,大家有没有觉得.NET类库越设计越大,有点失控了?(如.NET 1.0中设计的无数Collection类,都可以用.NET 2.0中的IList<T>替代)
/// <summary>
/// 安全接口:用户、角色、资源、认证
/// 简化版的 MembershipProvider and RoleProvider
/// </summary>
public interface ISecurity : IDisposable
{
// init
void Initialize(params object[] parameter);
// authenticate
bool ValidateUser(string userId, string password);
// create user object
IUserInfo CreateUserObject();
// user
IList<IUserInfo> GetUsers(params object[] filters);
IUserInfo GetUser(string userId);
void CreateUser(ref IUserInfo user);
void UpdateUser(ref IUserInfo user);
void DeleteUser(string userId);
// role
string[] GetAllRoles();
string[] GetRolesForUser(string userId);
string[] GetUsersInRole(string role);
// resources
string[] GetAllResources();
string[] GetResourcesForUser(string userId);
string[] GetUsersInResource(string resource);
}
/// <summary>
/// 基本用户信息接口
/// 简化版的 MembershipUser and Role
/// </summary>
public interface IUserInfo
{
string UserId { get; set; }
string UserName { get; set; }
string Password { get; set; }
string Organization { get; set; }
string Comment { get; set; }
string Status { get; set; }
string[] Roles { get; set; }
string[] Resources { get; set; }
}