【发布时间】:2012-08-07 12:21:46
【问题描述】:
我有一个 MVC 应用程序,它使用表单身份验证针对 Active Directory 进行身份验证。随着我的 MVC 应用程序变大,很明显我正在做的角色检查变得越来越分散。我想替换以下内容:
[Authorize(Roles = "Staff")] 和 Thread.CurrentPrincipal.IsInRole("Staff")
类似于以下内容:
[AuthorizePermission(Permission.CanDoSomething)] 和 Thead.CurrentPrincipal.HasPermission(Permission.CanDoSomething)
其中 Permission 是一个枚举。现在我在想我可以像这样定义每个 AD 角色在 web.config 中拥有的权限:
<role name="Staff">
<permissions>
<add name="CreateEditDeleteSomething" />
<add name="PublishSomething" />
<add name="QueryUsers" />
</permissions>
</role>
然后我可以实现一个 IPrincipal 扩展方法 - HasPermission(Permission permission)。这将查看用户是否登录到具有 web.config 中定义的传入权限的任何 AD 组。这将允许我更改特定 AD 组的权限,而无需更改代码或更新现有测试。然后自定义授权属性可以调用 HasPermission 方法。
这种方法是正确的还是有更好的方法来简化我在应用程序中的角色?我在这里和网络上看到了许多示例,但它们似乎过于复杂。我可以通过在 HasPermission 中根据我的 web.config 角色设置检查传入的权限来实现这一点吗? IPrincipal 将具有其 AD 角色,因此确定允许的权限肯定很简单?
任何帮助表示赞赏!
【问题讨论】:
标签: asp.net-mvc web-config roleprovider