考虑(来自https://www.owasp.org/index.php/Access_Control_Cheat_Sheet):
if (AC.hasAccess(ARTICLE_EDIT)) {
//execute activity
}
这正确地暗示了访问控制
...政策以某种方式持续/集中
我的问题是如何最好地集中这一点。
我能想到的一个显而易见的方法是在一个类中包含所有需要访问控制的活动 - 硬编码。我可以简单地在这个类上调用方法hasAccess(ARTICLE_EDIT)
。这意味着无论何时将活动添加到应用程序,我都需要将其添加到类中。
集中访问控制的另一种方法可能是在我的数据库中包含受控活动。每次我需要检查访问权限时,我都会调用hasAccess(ARTICLE_EDIT)
,这会触发对我的数据库的调用。我会在访问控制模型中包含该方法。
首先,我是一个正确的轨道吗?人们喜欢其他解决方案吗?您可以获得哪些解决方案的好处/问题?
答案 0 :(得分:1)
您正在使用"外部访问控制"问题。很高兴你能想到将业务逻辑与auhthorization逻辑分离开来。现在,您需要一种表达授权逻辑的方法。
有一种称为XACML的标准,即可扩展访问控制标记语言:
示例政策使用XACML ALFA表示法如下所示:
namespace example{
policy article{
target clause itemType=="article"
apply firstApplicable
rule editArticle{
target clause actionId == "edit" and userRole == "editor"
permit
condition userId == owner
}
}
}