MVC 授权角色和 IPrincipal - 它是如何工作的?
Posted
技术标签:
【中文标题】MVC 授权角色和 IPrincipal - 它是如何工作的?【英文标题】:MVC Authorization Role and IPrincipal - how does it work? 【发布时间】: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")] 【参考方案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;
【讨论】:
以上是关于MVC 授权角色和 IPrincipal - 它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET web api - 设置自定义 IIdentity 或 IPrincipal
在 MVC3 中使用自定义 IPrincipal 和 IIdentity
ASP.NET MVC 5 中的简单角色管理器和授权,无需使用 Identity(CustomRoleProvider)