我有一个使用Windows身份验证的MVC 5项目。
我使用默认的WindowsTokenRoleProvider作为我的角色提供程序,它适用于以下情况:
[CustomAuthorization(Roles = "DOMAIN\example_group")]
public ActionResult Action()...
效果很好。 当我想使用自定义角色时,问题就出现了,例如:" Approver"。为了检查谁是真正的批准者,我必须查询一个特殊的表并使用自定义逻辑来决定当前的人是否是批准者。
为了做到这一点,我覆盖了AuthorizeCore
的{{1}},并写了这样的内容:
CustomAuthorize
但是当我添加另一个角色时会发生什么,让我说protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if(CheckIfCurrentUserIsAnApprover()){
return true;
}
...........
}
,我将不得不添加:
Managers
如何让它更通用?
答案 0 :(得分:0)
这是基于属性的访问控制(ABAC)的明确案例。
ABAC使用属性扩展基于角色的访问控制,以便您可以根据用户的批准限制等事项做出决策。
在ABAC中,您可以编写访问控制策略,例如:
用于编写策略的语言是XACML(可扩展访问控制标记语言)。
XACML还定义了一个具有以下概念的架构:
您可以在此处阅读更多内容:http://developers.axiomatics.com/blog/index/entry/xacml-reference-architecture.html。 Axiomatics提供.net引擎和.net pep。