2013-03-19 118 views
3

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

在确定我的用户的权限,我有考虑众多,包括:

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

开发一个ACL被证明是困难的。过了一段时间,我采取了“如果/然后”检查每个动作顶部的基本属性,例如, if(isAdmin) {...}

这似乎工作正常,我想知道我是否应该留下它作为一个永久的解决方案。因此,问题是:访问控制的复杂性是否超过了ACL?还是仅仅是我需要尝试一下?

回答

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(isAdmin)和if(validCitizen)语句,最终得到一个if(isAuthorized())语句。实际授权逻辑集中在用XACML表达的策略中。这也被称为外部授权。

+0

哇大卫,这是一个耸人听闻的答案!非常感激! – 2013-03-20 20:49:18

+0

谢谢,很高兴提供帮助。 – 2013-04-03 14:18:58

1

首字母缩写词ACL代表访问控制列表。因此,根据定义 - 只要您基于哪个用户或哪个用户组控制了哪些用户可以访问哪些用户,就可以使用ACL。

所以第一个问题的简短答案是,是的,你总是使用ACL。

至于其他的问题,我会说是他们两个

的ACL可以变得比它的控制应该需要应用更复杂 - 比如你想太细了用户的操作控制。所以,如果你认为它变得复杂 - 看看你是否能够通过将一些ACO组合在一起甚至删除它们(并允许所有用户访问它们)来“稍微”降低它。