首页 新闻 会员 周边

大家讨论下ASP.NET提供的 Membership, Role, Profile 好不好用

0
悬赏园豆:10 [已关闭问题]

个人觉得除了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; }
    }

surfsky的主页 surfsky | 菜鸟二级 | 园豆:210
提问于:2009-10-13 16:17
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册