MVC5 ASP 身份动态授权属性
MVC5 ASP Identity dynamic Authorize attribute
我有一个带有后端的 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 dynamic authorization of multiple roles and users 但是有没有更简洁的方法来实现这个?
注意:我试图避免在每个方法中调用 User.IsInRole
。
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")]
我有一个带有后端的 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 dynamic authorization of multiple roles and users 但是有没有更简洁的方法来实现这个?
注意:我试图避免在每个方法中调用 User.IsInRole
。
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")]