【问题标题】:MVC Authorization Role and IPrincipal - how does it work?MVC 授权角色和 IPrincipal - 它是如何工作的?
【发布时间】:2011-01-29 04:28:44
【问题描述】:

我已经成功地为我的 MVC2 应用程序实现了一个自定义 MembershipProvider。我有自己的 User 表和 Role 表。

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

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

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

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

【问题讨论】:

  • 我不确定这如何与 MVC 一起使用,但是在 ASP.NET 和 WCF 中,您可以执行以下操作:[PrincipalPermission(SecurityAction.Demand, Role = "RoleName")] [授权(Roles="RoleName")]

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


【解决方案1】:

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

这个forum post 讨论了如果需要的话,为了实现自己的 IPrincipal 需要做什么。

【讨论】:

    【解决方案2】:

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

    由于我创建了自己的自定义 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;
        }
    

    【讨论】:

      猜你喜欢
      • 2014-05-08
      • 2021-09-04
      • 2010-10-21
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      相关资源
      最近更新 更多