您的问题很好,答案将突出 XACML 和外部授权作为一个整体的主要优势。
在 XACML 中,您定义通用的全局规则,关于什么是允许的,什么是不使用的,我称之为高级属性,例如车辆的属性(在您的情况下)或用户的属性(角色、部门……)
例如,一个简单的规则可以是(使用 ALFA 语法):
policy viewCars{
target clause actionId=="view" and resourceType=="car"
apply firstApplicable
rule allowSameRegion{
permit
condition user.region==car.region
}
}
用户的区域和汽车的区域都在应用程序的数据库中维护。这些值是使用 PIP 或策略信息点读取的(详情请参阅此处)。
在您的示例中,您谈到直接分配,即用户已直接分配给车辆。在这种情况下,规则将变为:
policy viewCars{
target clause actionId=="view" and resourceType=="car"
apply firstApplicable
rule allowAssignedVehicle{
permit
condition user.employeeId==car.assignedUser
}
}
这意味着分配的用户信息必须保存在应用程序数据库、CSV 文件、Web 服务或其他信息源中。这意味着从管理的角度来看,管理员将从用户的分配列表中添加/删除车辆(或者可能反过来:从车辆的分配用户列表中添加/删除分配的用户)。
XACML 规则本身不会改变。如果主管向员工列表(保存在应用程序级数据库中)添加了 20 辆汽车,那么 PDP 将能够通过 PIP 使用该信息,并相应地授予或拒绝访问。
XACML 的主要好处是您可以添加第二条规则,该规则规定主管可以查看分配给他/她的汽车(正常规则)以及分配给他/她的下属的汽车(新的代理代表)规则)。
此图取自 Axiomatics 博客,总结了 XACML 流程:
HTH,如果您还有其他问题,请告诉我。您可以在此处下载 ALFA,也可以在此处观看教程。