我有一个带有授权控制器的asp mvc应用程序。 是否可以访问角色字符串的内容?
[Authorize(Roles = "Medialen, Admin, Verkoop, Medewerker")]
public class BaseController : Controller
{
因此,对于上面的控制器,它应该返回" Medialen,Admin,Verkoop,Medewerker"
答案 0 :(得分:2)
您可以使用反射来抓取属性定义,如下所示。
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;
}
}
所以它看一下控制器级别;它也可以增强以查看方法。我假设您正在尝试从动作方法中获取此信息,但您也可以始终从过滤器属性中获取它,具体取决于您希望如何使用它。
答案 1 :(得分:1)
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")]
如果你有系统中所有现有角色的列表,还存在另一个愚蠢的变体获取当前角色的行动:
public ActionResult Index()
{
var roles = GetListOfRoles(); //Get all list of roles, for example from db
var currentRoles = roles.Where(User.IsInRole);
....
}
但如果你想要一些安全的检查,第一个更好。