【发布时间】:2015-04-27 09:48:59
【问题描述】:
如果需要可以提供更多信息,先在这里发布!
我目前正在使用标准角色 authorisation(webpages_roles/webpages_usersinroles) 功能在 asp.net mvc4 中管理一个网站。
这在一定程度上可以正常工作,控制器中的操作结果会使用以下标签进行适当的修饰:
[Authorize(Roles = "Admin")]
或多个角色之一可以访问的地方:
[Authorize(Roles = "Admin, Manager")]
我需要做的是授权多个角色,"AND"而不是"OR"的情况。
例如。用户必须同时具有"Manager" 角色和"Finance" 角色才能访问控制器。只有"Manager" 或只有"Finance" 的用户不能同时访问操作结果。
这将如何实现?搜索结果显示人们谈论扩展授权属性,但如果有关于如何做到这一点的具体建议或更直接的东西,在这种情况下它会非常有用!
Spike 的解决方案进行了微小的修改,for each 使用 var 创建 char 数据类型,IsInRole 函数需要 string
最终代码:
public class AndAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
IPrincipal user = httpContext.User;
try
{
if (Roles != null && Roles.Any())
{
foreach (string r in Roles.Split(','))
{
if (!user.IsInRole(r))
return false;
}
}
return true;
}
catch (Exception ex)
{
return false;
}
}
}
【问题讨论】:
标签: c# asp.net-mvc-4 asp.net-roles