2012-01-02 84 views
4

逻辑卡住点。我正在构建一个简单的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),那么他是editormoderator。根据tbl_acl的规则,editor应该被拒绝,其中moderator应该被允许。

他应该被允许访问资源还是应该被拒绝? 允许 FIRST或拒绝第一。哪个应该优先考虑?

寻找到这个

  1. 虽然拒绝用户的编辑从某种角度来说,他作为主持人被允许访问该地区。
  2. 尽管主持人被允许访问资源,但所有编辑者都受到限制。
  3. 不要忘记用户也是member。所以如果我们优先考虑允许拒绝。会员将可以作为主持人访问。除非,成员也被屏蔽

P.S. 我很清楚这个话题是有争议的。所以,事实将不胜感激(不说)超过意见和猜测。

回答

2

您遇到了这个困境,因为您采用了默认允许访问资源的非标准方法。更为标准的方法是默认阻止访问,通过一个或多个“允许”ACL条目授予访问权限,甚至可以通过单个“拒绝”条目覆盖任何“允许”条目。在这种方法下,任何给定的“拒绝”条目胜过所有“允许”条目。 (即:应用程序应该首先查找否认,如果发现任何,它甚至不需要检查允许)。

如果您需要说服“默认防止”是比“在默认情况下允许”,这里有几个主要区别:

  1. 它通常是一个更适合的权限大多数权限管理员举行 管理的心智模式,无论是 IT人员或业务角色的应用管理员。 (当然,这 是至少部分是由于这样的事实,大多数其他系统,他们 将有管理使用这种模式,但这并不能使它 不太相关。)

  2. 人为错误是不太可能导致不适当授予 权限。 (即:如果管理员忘记添加一个“允许”下防止按默认 项,没有用户最终能够访问 资源,他不应该已经能够触及。)

  3. 当新的权限被添加到系统中,没有人没有特殊的 管理员权限可以访问目标资源,直到明确的 “允许”条目被添加。

#3特别引人注目。想象一下,您可以使用新的“查看工资”权限部署新版HR应用程序。你会发现允许所有用户被授予此权限是可以接受的,直到有人开始为ACL添加“拒绝”项吗?

+0

我只关注创建一个默认的允许,是,将有更少的表上的条目。但你提出了一个很好的观点......我需要更多的回应来明确这个话题。 (+1) – Starx 2012-01-04 03:15:33

+0

好吧,我要防止默认情况下,但应'允许'覆盖'拒绝'?你有什么话要说? – Starx 2012-01-04 10:57:52

+0

如果您在默认情况下阻止,权限的默认状态是“软”拒绝。这通过明确的“允许”授予来覆盖。明确拒绝必须重写允许才能在这种情况下始终如此有用。另外,请记住,默认情况下未授予权限时,显式拒绝使用往往会相对较少。明确否认的最常见用法之一是列入黑名单,如果拒绝被允许超过,这是不可能的。 – 2012-01-04 12:45:12

0

对于我来说'允许'应该在有冲突的权限时从'拒绝'中获胜。一般而言,您将角色跨越广泛的功能集,但权限有限(例如,访客)角色的责任心更大。只有当您允许覆盖“拒绝”时,您才能重新使用常规角色。

示例权限:

1。

deny members all 
allow members to view articles 

允许推翻拒绝。

  1. 苏曼编辑。编辑可以做一些事情,并且拒绝其他一些事情,例如权限X.现在,如果拒绝优先于允许Suman不允许执行X.为非常特定的特权创建角色是很重要的,修改一些常规角色(客人,成员),否则它会双向切割(无法否认苏曼通过角色给予他的特权)。
+0

检查我的更新,我做了一个真实的场景 – Starx 2012-01-02 09:03:42

+0

@Starx希望我的更新使它更清晰。 – koen 2012-01-02 17:17:47

0

在我看来,默认应该是拒绝访问,除非他们被允许作为一个组的成员访问它(在tbl_acl中)。

+0

这是一个值得商榷的问题,尽管他被拒绝为编辑,但他被允许成为会员。 – Starx 2012-01-02 08:51:05

+0

我认为允许应该覆盖拒绝(这只是一个意见)。因为您可以将其视为正在晋升为编辑的成员,因此可以获得更多访问权限。 – redmoon7777 2012-01-02 08:54:34

+0

检查我的更新,我做了一个真实的场景 – Starx 2012-01-02 09:04:09

0

我认为建筑的心理形象是适当的。2情景的:

的“默认允许”的情景:

  • 建筑物的入口是开放
  • 大楼的房间是开放
  • 在房间的任何衣柜是开放

如果在这种情况下拒绝访问它将看起来像这样:

  • 约翰是不允许进入房间A
  • 约翰是接近室A
  • 总得有人来检查它是否是约翰
  • 有人必须拒绝约翰进入房间
  • 管理局某人关闭在约翰面前的门

这正好与在每个房间等衣柜这是每一个想进入房间,应该是比较黑名单要么拒绝或允许的人做同样的。

这是如何实用?

的“默认拒绝”的情景:

  • 建筑物的入口关闭并上锁
  • 建筑的房间都关闭并锁定
  • 在房间的任何衣柜被关闭,锁定

如果在这种情况下,允许访问它应该是这样的:

  • 为建筑物以及人员需要访问的每个房间和壁橱提供一把钥匙。

这是否实用?甚至有可能给每个人一个独特的钥匙。是的,这是很多管理和管理的关键。但胜利?它将提供粒度和灵活性,同时提高安全性。