2

我已经成功地为我的 MVC2 应用程序实现了自定义 MembershipProvider。我有自己的用户表和角色表。

我现在的问题是,当我输入 [Authorize(Roles="blah")] 属性时,它不起作用。我进行了一些搜索,但没有找到我正在寻找的明确答案,即 - 此角色授权如何工作?我的 web.config 使用标准的 AspNet 角色提供程序。

我的理解是我必须让我的 User.cs 类实现 IPrincipal 接口,这意味着,添加代码来检查 IsInRole。

我的问题 - 这是正确的吗?框架如何知道并知道如何获取我的自定义用户对象?我的理解是 Asp.Net 身份验证和授权部分与 MembershipUser 一起使用。

任何提示、想法或链接将不胜感激,谢谢

4

2 回答 2

1

好吧,我想我明白了,我只是有点盲目。

由于我创建了自己的自定义 MembershipProvider(具有自己的自定义 User 表和 Role 表),因此我不得不实现自定义 RoleProvider。所以,一旦我这样做了,这一切都说得通了,因为 RoleProvider 有 IsUserInRole 方法,即

public override bool IsUserInRole(string username, string roleName)
    {
        IUserRepository userRepository = GetUserRepository();
        User user = userRepository.Retrieve(username);

        // and here, my User class implements IPrincipal
        if (user != null && user.IsInRole(roleName)) 
                return true;
        else
            return false;
    }
于 2011-01-29T06:10:48.677 回答
1

您的角色表/代码是 RoleProvider 的实现吗?我相信 IPrincipal 对 web.config 中配置的默认 RoleProvider 起作用。

论坛帖子讨论了如果需要,您需要做什么才能实现自己的 IPrincipal。

于 2011-01-29T05:43:06.267 回答