如果角色包含空格,如何编写AuthorizeAttribute

时间:2012-06-08 19:23:04

标签: c# asp.net-mvc-3 authorization

我正在使用MVC3 / 4。但这只是授权中的一般性问题。

我所拥有的一个角色在数据库中被命名为“Trip Leader”,其中包含一个空格。

我尝试了[Authorize(Roles="'Trip Leader', Administrator")],但它无法正常工作。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

创建您自己的属性并从AuthorizeAttribute派生。然后重写AuthorizeCore方法并实现自己的逻辑,并对包含空格的角色进行验证。

一个例子可能是这样的:

public class CustomAuthAttribute : AuthorizeAttribute
{
   private readonly IUserRoleService _userRoleService;
   private string[] _allowedRoles;

   public CustomAuthAttribute(params string[] roles)
   {
      _userRoleService = new UserRoleService();
      _allowedRoles = roles;
   }
   protected override bool AuthorizeCore(HttpContextBase httpContext)
   {
    //something like this.
    var userName = httpContext.User.Identity.Name;
    var userRoles = _userRoleService .GetUserRoles(userName); // return list of strings
    return _allowedRoles.Any(x => userRoles.Contains(x));
   }

}

<强>用法

[CustomAuth("role withspace","admin")]
public ActionResult Index()
{
}

答案 1 :(得分:0)

试试这个:

[Authorize(Roles="Trip Leader")]
[Authorize(Roles="Administrator")]

编辑:上述代码要求用户履行这两个角色。如果您正在寻找/或授权,请尝试以下:

[Authorize(Roles="Trip Leader, Administrator")]

答案 2 :(得分:0)

我无法得到其他工作的答案。我的角色中包含逗号,并且不会使用原始的AuthorizeAttribute。

<td class="td10"><span class="prefix">$</span><input class="my-input" type='text' class='form-control' id="boqRate" name="boq[boqRate]"></td>