MVC5 ASP身份动态授权属性

本文关键字:授权 属性 动态 身份 ASP MVC5 | 更新日期: 2023-09-27 17:50:57

我有一个MVC5项目,后端配置哪个角色可以访问哪个菜单。实现基于角色的授权的正常方法是这样的:

[Authorize(Roles="Admin")]
public ActionResult UpdateProduct(ProductModel model)
{
     //do something
     return View(model);
}

因为我需要角色是动态的,所以我在想这样的东西。

[Authorize(Roles=GetRoles("UpdateProduct"))]
public ActionResult UpdateProduct(ProductModel model)
{
     //do something
     return View(model);
}

显然它不起作用,因为属性是静态元数据。

我环顾四周,发现这个MVC 3多个角色和用户的动态授权,但有一个更干净的方式来实现这一点?

注意:我试图避免在每个方法中调用User.IsInRole

MVC5 ASP身份动态授权属性

c#中代码属性的定义是静态的——因此你不能有一个方法,GetRoles()

您建议使用如下属性:

[Authorize(Roles=GetRoles("UpdateProduct"))]

这将意味着您必须在代码中实现GetRoles(),因此使用从Authorize派生的自定义属性。

    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        public CustomAuthorizeAttribute(string roleSelector)
        {
            Roles = GetRoles(roleSelector);
        }
        private string GetRoles(string roleSelector)
        {
            // Do something to get the dynamic list of roles instead of returning a hardcoded string
            return "Somerole";
        }
}

现在你可以输入:

[CustomAuthorize("updateProduct")]