逻辑卡住点。我正在构建一个简单的ACL,我只是感到困惑。我只是想以正确的方式做到这一点。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
。根据tbl_acl
的规则,editor
应该被拒绝,其中moderator
应该被允许。
他应该被允许访问资源还是应该被拒绝? 允许 FIRST或拒绝第一。哪个应该优先考虑?
寻找到这个
- 虽然拒绝用户的编辑从某种角度来说,他作为主持人被允许访问该地区。
- 尽管主持人被允许访问资源,但所有编辑者都受到限制。
- 不要忘记用户也是
member
。所以如果我们优先考虑允许拒绝。会员将可以作为主持人访问。除非,成员也被屏蔽
P.S. 我很清楚这个话题是有争议的。所以,事实将不胜感激(不说)超过意见和猜测。
我只关注创建一个默认的允许,是,将有更少的表上的条目。但你提出了一个很好的观点......我需要更多的回应来明确这个话题。 (+1) – Starx 2012-01-04 03:15:33
好吧,我要防止默认情况下,但应'允许'覆盖'拒绝'?你有什么话要说? – Starx 2012-01-04 10:57:52
如果您在默认情况下阻止,权限的默认状态是“软”拒绝。这通过明确的“允许”授予来覆盖。明确拒绝必须重写允许才能在这种情况下始终如此有用。另外,请记住,默认情况下未授予权限时,显式拒绝使用往往会相对较少。明确否认的最常见用法之一是列入黑名单,如果拒绝被允许超过,这是不可能的。 – 2012-01-04 12:45:12