繁体   English   中英

如何访问控制器的授权角色?

[英]How can I access the Authorized Roles for a controller?

我有一个asp mvc应用程序,它具有授权控制器。 是否可以访问角色字符串的内容?

[Authorize(Roles = "Medialen, Admin, Verkoop, Medewerker")]
public class BaseController : Controller
{

所以对于上面的控制器,它应该返回“Medialen,Admin,Verkoop,Medewerker”

您可以使用反射来抓取属性定义,如下所示。

public ActionResult SOmeAction()
{
   //this refers to controller, GetCustomAttribute looks for attribute on controller
   //GetCustomAttribute is a 4.5 extension method
   var attrib = this.GetType().GetCustomAttribute<AuthorizeAttribute>();
   if (attrib != null)
   {
      var roles = attrib.Roles;
   }
}

所以它看一下控制器级别; 它也可以增强以查看方法。 我假设您正在尝试从动作方法中获取此信息,但您也可以始终从过滤器属性中获取它,具体取决于您希望如何使用它。

Brian Mains的答案实际上是正确的,但存在另一种变体如何做到这一点:

您可以创建自定义属性,该属性继承自Authorize属性并在OnAuthorization Method中执行您的操作。

public class YourAuthorizationAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var roles = this.Roles;            
        //your things   
        base.OnAuthorization(filterContext);
    }    
}

然后将其与您的操作或控制器一起使用

[YourAuthorizationAttribute (Roles = "Medialen, Admin, Verkoop, Medewerker")]

如果你有系统中所有现有角色的列表,还存在另一个愚蠢的变体获取Action中的当前角色:

public ActionResult Index()
{
     var roles = GetListOfRoles(); //Get all list of roles, for example from db
     var currentRoles = roles.Where(User.IsInRole);
     ....
}

但如果你想要一些安全的检查,第一个更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM