【问题标题】:How to set a privilege inside a role in ASP.NET MVC?如何在 ASP.NET MVC 中的角色内设置权限?
【发布时间】:2016-12-02 22:23:48
【问题描述】:

我目前有一个系统,其中有一个用户表、一个角色表和一个用户角色关联表,其中一个用户可以关联到多个角色(如 Admin、BasicUser 等)。我能够根据这些角色授权操作方法。这是来自身份框架。

现在我想添加对权限的支持,以便操作方法也可以基于这些权限进行限制,而不仅仅是角色。例如,在控制器中,我可能有一个 HTTPPost 操作,只有具有“写入”权限的人才能成功执行。

我需要进行哪些更改才能将权限分配给角色?即,我想选择“Admin”角色拥有“Write”和“Read”权限,而“BasicUser”角色只会被分配“Read”权限。这样,管理员可以访问写入权限允许的任何方法,而基本用户则不能。

如果我要创建另一个名为“Privilege”的表以及该表和角色之间的关联表,以及在角色中设置权限的代码,我如何使用该权限作为过滤器?因此,例如,以下操作应该只允许由具有“写入”权限的角色的用户执行。

[Write]
public ActionResult Create()
{
   return View();
}

谢谢。

【问题讨论】:

    标签: asp.net asp.net-mvc authorization asp.net-identity privileges


    【解决方案1】:

    AuthorizeAttribute 的工作方式相同,您可以创建一个继承自它的自定义授权属性:

    public class AuthorizePrivilegeAttribute : AuthorizeAttribute
    {
        // Custom property
        public string Privilege { get; set; }
    
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            // Reusing default authentication. 
            var isAuthorized = base.AuthorizeCore(httpContext);
            if (!isAuthorized)
            {                
                return false;
            }
    
            return YourCustomCode.HasPrivilege(this.Privilege))      
        }
    }
    

    然后在你的方法之上使用它:

    [AuthorizePrivilege(Privilege = "Write")]
    public ActionResult Create()
    {
        return View();
    }
    

    【讨论】:

    • 感谢您的起点。使用这种技术,YourCustomCode 类是否会包含检查角色和特权之间的关联的代码? IE。所有的数据库代码?
    • 没错!如果您对答案感到满意,请不要忘记标记为答案。
    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2021-08-16
    • 2016-01-30
    • 2010-10-21
    • 2020-12-05
    • 2010-11-20
    • 2010-12-23
    相关资源
    最近更新 更多