6

在 Windows 域 Intranet 站点(使用<authentication mode="Windows" />)上工作时,我遇到了以下问题:

[Authorize(Roles = "Domain Users, Domain Admins")]
public class MyController: Controller {...}

由于活动目录组名称中的空格,此控制器不可用于任何用户。那么我可以让 MVC(或 ASP.Net)正确授权,同时使用带空格的角色名称(这里:AD 组的名称)吗?

只是没有回应的类似问题:

  1. 带有用于角色授权的空格的 AD 组
  2. 如果角色包含空格,如何编写 AuthorizeAttribute
4

3 回答 3

6

创建您自己的属性并从 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()
{
}
于 2012-10-25T06:51:19.250 回答
3

当我这样做时,空间角色工作正常:

public static class AppRoles
{
    public const string Manager     =@"domain\App Manager";
    public const string Admin       =@"domain\App Admin";
}

[Authorize(Roles = AppRoles.Admin)] 
public class MyAbcController : Controller
{
    //code
}
于 2016-01-29T18:06:52.977 回答
2

您可以尝试在您的姓名前添加“MyDomain\”。

[Authorize(Roles = @"mydomain\Domain Users, mydomain\Domain Admins")]

请记住添加@ 或将斜杠“\”加倍。

于 2014-06-09T15:26:18.247 回答