逻辑卡点.我正在构建一个简单的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(编辑器),已拒绝资源1(假设这是管理区域).
但是,如果你使用userid:2(suman),那么他既是编辑又是主持人.根据tbl_acl的规则,编辑器应该被拒绝,应该允许主持人.
他应该被允许访问资源还是应该被拒绝?允许FIRST或拒绝FIRST.哪个应优先考虑?
一些调查方法
>虽然用户被拒绝作为编辑,但他作为主持人被允许访问该区域.
>即使允许主持人访问资源,所有编辑器都受到限制.
>不要忘记用户也是会员.因此,如果我们优先考虑允许而不是拒绝.会员可以作为主持人访问.除非,会员也被阻止
附:
我很清楚这个话题值得商榷.因此,事实将被赞赏(不是说不)超过意见和猜测.
最佳答案 您遇到了这种困境,因为您采用了默认允许访问资源的非标准方法.更标准的方法是默认禁止访问,通过一个或多个“允许”ACL条目授予访问权限,甚至通过单个“拒绝”条目覆盖任何“允许”条目.在这种方法下,任何给定的“拒绝”条目都胜过所有“允许”条目. (即:应用程序应首先查找拒绝,如果找到,则甚至不需要检查允许.)
如果您需要说服“默认情况下防止”是比“默认允许”更好的模型,这里有一些主要区别:
>它通常更适合权限的心智模型
大多数权限管理员持有的管理,无论他们是谁
IT人员或业务角色应用程序管理员. (当然,
这至少部分是由于大多数其他系统的事实
将被管理使用这个模型,但这并没有任何
不太相关.)
>人为错误不太可能导致不恰当的授予
允许. (即:如果管理员忘记添加“允许”
在默认情况下防止输入,没有用户最终能够访问
他不应该触及的资源.)
>当一个新的权限添加到系统时,没有特殊的人
管理员权限可以访问目标资源,直到显式
添加“允许”条目.
#3特别引人注目.想象一下,您使用新的“查看工资”权限部署新版本的HR应用程序.您是否认为允许所有用户被授予此权限是可以接受的,直到有人为您的ACL添加“拒绝”条目为止?