1

我有一个带有 Windows 身份验证的 MVC 5 项目。

我使用默认的 WindowsTokenRoleProvider 作为我的角色提供程序,它适用于以下情况:

[CustomAuthorization(Roles = "DOMAIN\example_group")]
public ActionResult Action()...

它工作得很好。当我想使用自定义角色时,问题就开始了,例如:“批准人”。为了检查谁是真正的审批者,我必须查询一个特殊的表并使用自定义逻辑来确定当前人是否是审批者。

为了做到这一点,我重写了AuthorizeCoreof CustomAuthorize,并写了如下内容:

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    if(CheckIfCurrentUserIsAnApprover()){
        return true;
    }
    ...........
}

但是当我添加另一个角色时会发生什么,比如说Managers,我将不得不添加:

if(CheckIfCurrentUserIsManager()){
        return true;
}

我怎样才能使它更通用?

4

1 回答 1

0

这是基于属性的访问控制 (ABAC) 的明确案例。

ABAC 使用属性扩展了基于角色的访问控制,以便您可以根据用户的批准限制等因素做出决策。

在 ABAC 中,您可以编写访问控制策略,例如:

  • 如果user.location==object.location,则角色==approver 的用户可以对类型==transaction 的对象执行action==view。

用于编写策略的语言是 XACML(可扩展访问控制标记语言)。

XACML 还定义了具有以下概念的体系结构:

  • 策略执行点:应用前面的拦截器
  • 策略决策点:做出决策的引擎

您可以在此处阅读更多信息:http: //developers.axiomatics.com/blog/index/entry/xacml-reference-architecture.html。Axiomatics 提供了一个 .net 引擎和一个 .net pep。

于 2015-03-13T08:14:20.923 回答