MVC授权角色和IPrincipal - 它是如何工作的?

时间:2011-01-29 04:28:44

标签: asp.net-mvc membership-provider iprincipal

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

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

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

我的问题 - 这是对的吗?框架如何知道并知道如何获取我的自定义User对象?我的理解是,Asp.Net认证&授权部分与MembershipUser一起使用。

任何提示,想法或链接都将不胜感激, THX

2 个答案:

答案 0 :(得分:1)

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

这个forum post讨论了如果需要,你需要做些什么才能实现自己的IPrincipal。

答案 1 :(得分:1)

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

由于我创建了自己的自定义MembershipProvider(具有自己的自定义用户表和角色表),因此我必须实现自定义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;
    }