逻辑卡点。我正在构建一个简单的ACL,我只是感到困惑。我只是想以正确的方式做到这一点。
举一个基于简单模型的ACL的例子。
管理用户tbl_user
id | userid |
-------------
1 | nabin |
2 | suman |
管理群组tbl_group
id | groupname |
-----------------
1 | admin |
2 | member |
3 | editor |
4 | moderator |
另一个用于维护组和用户的表。 tbl_roles
id | userid | groupid
-----------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 2 | 3
5 | 2 | 4
现在有一个用于管理访问权限的表tbl_acl
id | groupid | appresourceid
----------------------------
1 | 3 | 1
在这个表上,我将存储拒绝列表,因为拒绝列表肯定会比访问列表短。
现在,根据示例groupid:3 (editor)
,已拒绝资源1(假设这是管理区域)。
但是,如果你选择userid: 2(suman)
,那么他就是editor
和moderator
。根据{{1}}规则,{I}应该被拒绝,tbl_acl
应该被允许。
他应该被允许访问资源还是应该被拒绝? 允许 FIRST或拒绝 FIRST。哪个应该优先考虑?
查看此内容的一些方法
editor
。因此,如果我们优先考虑允许而不是拒绝。会员可以作为主持人访问。除非,会员也被阻止<子> 附: 我很清楚这个话题值得商榷。因此,事实将被赞赏(不是说不)超过意见和猜测。 子>
答案 0 :(得分:2)
您遇到了这种困境,因为您采用了默认允许访问资源的非标准方法。更标准的方法是默认禁止访问,通过一个或多个“允许”ACL条目授予访问权限,甚至通过单个“拒绝”条目覆盖任何“允许”条目。在这种方法下,任何给定的“拒绝”条目都胜过所有“允许”条目。 (即:应用程序应首先查找拒绝,如果找到,则甚至不需要检查允许。)
如果您需要说服“默认情况下防止”是比“默认允许”更好的模型,这里有一些主要区别:
它通常更适合权限的心智模型 大多数权限管理员持有的管理,无论他们是谁 IT人员或业务角色应用程序管理员。 (当然, 这至少部分是由于大多数其他系统的事实 将被管理使用这个模型,但这并没有任何 不太相关。)
人为错误不太可能导致不恰当的授予 允许。 (即:如果管理员忘记添加“允许” 在默认情况下防止输入,没有用户最终能够访问 他不应该触及的资源。)
当向系统添加新权限时,没有特殊情况的人 管理员权限可以访问目标资源,直到显式 添加“允许”条目。
#3特别引人注目。想象一下,您使用新的“查看工资”权限部署新版本的HR应用程序。您是否认为允许所有用户被授予此权限是可以接受的,直到有人为您的ACL添加“拒绝”条目为止?
答案 1 :(得分:0)
对于我来说'允许'应该在权限冲突时从'拒绝'获胜。通常,您将拥有跨越广泛功能集但具有有限权限(例如来宾)的角色,以及具有更高响应性的角色。只有当您允许覆盖'被拒绝'时,您才能重用一般角色。
示例权限:
1
deny members all
allow members to view articles
允许否决否定。
答案 2 :(得分:0)
在我看来,默认应该是拒绝访问,除非允许他们以组成员的身份访问它(在tbl_acl中)。
答案 3 :(得分:0)
我认为建筑的心理形象是合适的。 2场景:
默认情况下允许&#39;情形:
如果在这种情况下拒绝访问,它将如下所示:
这与每个房间的衣柜等相同。这是为每个想要进入房间的人做的,应该与黑名单进行比较以拒绝或允许。
这有什么用?
默认拒绝&#39;情形:
如果在这种情况下允许访问,它将如下所示: