是否始终需要ACL?

Kim*_*nce 3 acl design-patterns access-control rbac abac

对于具有高度复杂的访问控制规则的Web应用程序,您是否始终使用ACL?

在确定用户权限时,我有很多考虑因素,包括:

  • 他们登录了吗?
  • 他们是管理员还是普通用户?
  • 他们在图表中浏览节点吗?
  • 他们在浏览什么类型的节点?
  • 它们与节点的关系是什么(即节点的路径)?
  • 用户的默认设置是什么?
  • 节点的默认设置是什么?
  • 将用户连接到节点的图形边缘的设置是什么?
  • 等等

开发ACL证明是困难的.过了一会儿,我采取了对每个动作顶部的基本属性进行"if/then"检查,例如if(isAdmin) {...}

这似乎工作正常,我想知道是否应该将其作为永久解决方案留在原地.因此,问题是:访问控制的复杂性是否会超过ACL?或者只是我需要更努力一点?

Dav*_*ard 7

当您的访问控制模型变得过于复杂,因为访问不再仅基于用户的身份时,您希望转移到另一个访问控制模型.

您可以使用基于角色的访问控制(RBAC),其中权限分组为角色,角色分配给用户.Active Directory和其他LDAP产品允许您执行基于角色的访问控制.

但是,如果您想要实现的不仅仅是角色,特别是您想要考虑关系,图形和图形边缘,您还希望使用基于属性的访问控制(ABAC).在基于属性的访问控制中,您可以实现授权逻辑,该逻辑考虑用户属性(他们的角色,部门,位置,年龄,公民身份......)以及资源属性(节点在图表中的位置,边缘...... .)以及节点和用户之间的关系.

我在ABAC上传了一个视频:www.youtube.com/watch?v = xUEbBKnxWSo CERIAS也有一些很棒的视频:www.youtube.com/watch?v = 3ZCoupGHmwo

今天实现ABAC的主要标准是XACML,即可扩展访问控制标记语言.我会研究XACML(免责声明 - 我为Axiomatics工作,XACML供应商).

您可以查看供应商和开源XACML实现.

使用XACML,您最终只能拥有一个if(isAuthorized())语句,而不是拥有一堆if(isAdmin)和if(validCitizen)语句.实际的授权逻辑集中在用XACML表示的策略中.这也称为外部授权.