MVC5 ASP Identity dynamic Authorize attribute
我有一个带有后端的 MVC5 项目来配置哪个角色可以访问哪个菜单。实现基于角色的授权的正常方式是这样的。
1 2 3 4 5 6 | [Authorize(Roles="Admin")] public ActionResult UpdateProduct(ProductModel model) { //do something return View(model); } |
因为我需要角色是动态的,所以我正在考虑这样的事情。
1 2 3 4 5 6 | [Authorize(Roles=GetRoles("UpdateProduct"))] public ActionResult UpdateProduct(ProductModel model) { //do something return View(model); } |
显然它不起作用,因为属性是静态元数据。
我环顾四周,发现了这个 MVC 3 多角色和用户的动态授权,但是有没有更简洁的方法来实现这一点?
注意:我试图避免在每个方法中调用
C# 中代码属性的定义是它是静态的——因此你不能有一个方法,
您建议需要一个属性,例如:
这意味着您必须在代码中实现
派生的自定义属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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"; } } |
所以现在你可以这样做了: