Elh*_*ham 6 c# asp.net-mvc authorization roleprovider
我正在为我的asp.net mvc项目使用角色管理器和Windows身份验证,我们有2个角色,它们是查看者和编辑者.
<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<clear />
<add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)
编辑器可以访问整个应用程序,但Viewer只能访问两个操作
我首先尝试为基本控制器设置Authorize属性,只允许编辑器访问所有内容:
[Authorize(Roles = "Editors")]
public class BaseController : Controller
Run Code Online (Sandbox Code Playgroud)
然后将Authorize属性添加到这两个操作:
[Authorize(Roles = "Viewers,Editors")]
public ActionResult Report(PaymentsUnallocatedAndQueriedModel model)
Run Code Online (Sandbox Code Playgroud)
它不起作用,它不允许观众访问任何有意义的动作.
我认为在每个操作的顶部重复授权属性并不是一个好主意.
你能否告诉我是否有更好的解决方案
你必须从树的角度来看这个.要进行操作,您必须首先能够访问控制器.在这种情况下,您已将控制器限制为编辑器组,因此查看者甚至无法实现这一目标.最有可能更有帮助的是将控制器限制为Viewers, Editors,然后在仅需要编辑者权限的操作中,指定那些.这将生成冗余属性,但如果必须基于角色成员资格手动限制每个操作,请考虑代码成本.
[Authorize(Roles = "Viewers, Editors")]
public class BaseController : Controller
{
[Authorize(Roles = "Editors")]
public ActionResult EditReport(PaymentsUnallocatedAndQueriedModel model)
{
// Some editor only functionality
}
public ActionResult Report(PaymentsUnallocatedAndQueriedModel model)
{
// Some functionality for both. No attribute needed
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4165 次 |
| 最近记录: |