在Windows域内网站点(<authentication mode="Windows" />
)上工作时,我遇到了以下问题:
[Authorize(Roles = "Domain Users, Domain Admins")]
public class MyController: Controller {...}
由于活动目录组名称中的空格,此控制器不可供任何用户使用。那么我可以正确地使MVC(或ASP.Net)授权,同时使用带空格的角色名称(这里:AD组的名称)吗?
只是类似的问题没有回应:
答案 0 :(得分:5)
创建您自己的属性并从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 :(得分:2)
您可以尝试添加&#34; MyDomain \&#34;在你的名字前面。
[Authorize(Roles = @"mydomain\Domain Users, mydomain\Domain Admins")]
请记住添加@或加倍斜杠&#34; \&#34;。
答案 2 :(得分:1)
当我这样做时,空间的作用很好:
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
}