如何在 ASP.NET MVC 中的角色内设置权限?

How to set a privilege inside a role in ASP.NET MVC?

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

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

我需要进行哪些更改才能为角色分配权限?即,我想 select "Admin" 角色拥有 "Write" 和 "Read" 权限,而 "BasicUser" 角色只会被分配 "Read" 特权。这样,Admin 可以访问 Write 权限允许的任何方法,而 BasicUser 不能。

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

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

谢谢。

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();
}