phpGACL中文手册(五)phpGACL怎样确定权限呢?

phpGACL 怎样确定权限呢?

当飞船上的计算机(当然运行是的 phpGACL 了)检查权限时,它只需要问自己这样一个问题:" X 人有权进入 Y 房间吗?"用 phpGACL 的说法就是" ARO 对象 X 有权访问 ACO 对象 Y 吗?"

phpGACL 通过从 ARO 树的顶部向下遍历的方式,直到找到那个人,明确其访问控制权限来确定该人是否有权访问指定房间。当它找到那个人时,它将它最终遇到的访问控制权限作为结果返回。通过这种方式,你能够为人们所属的组定义访问控制权限,但也可以在你需要时在树的下一层次覆写它们。

1 :我们问" Luke 有访问休息室的权限吗?"

  • 设置缺省结果,"拒绝"
  • 遍历 ARO 树以找到 Luke

千年隼号乘客→ 乘客→ 绝地战士→ Luke

ARO 树顶开始遍历到 Luke :"千年隼号乘客"节点没有定义任何权限,所以这儿不做任何事情。

移动到"乘客"节点,这儿清楚地表示"乘客"有进入休息室的权限,所以改变内部结果为"允许"。

移动到"绝地战士"节点,这儿根本没有提到任何关于休息室的话。

最后移动到 Luke ,这儿也没提至休息室

现在已经到达终点了,所以返回结果就是当前的内部结果值:"允许"

 

2 :我们问:" Chewie 有权访问发动机室吗?"

  • 设置缺省结果,"拒绝"
  • 遍历 ARO 树以找出 Chewie

千年隼号乘客→ 船员→ Chewie

  • ARO 树顶开始遍历到 Chewie ,"千年隼号乘客"节点没有定义任何权限,所以这儿不做任何事情。
  • 移至"船员"节点,该节点明确表明"船员"组拥有访问发动机室的权限,因此改变内部结果为"允许"。
  • 移至 Chewie 节点,该节点规则表明没有访问发动机室的权限,因此改变内部结果为"拒绝"。
  • 现在已经到达终点了,所以返回结果就是当前的内部结果值:"拒绝"

就象你从例子上看到的那样,如果一个组没被明确指定访问某个房间的权限的话,那么该组就会继承其父节点对该房间的权限。如果根节点("千年隼号乘客")也没有被指定权限的知,则它继承它的缺省设置(在上面的例子里是"全部拒绝")

从上面的例子我们不难看出 ARO 树中有意思的几点:

  • ARO 树总是列出完整的 ARO 对象列表。如果问题是" Jabba 是否有权进入驾驶室?"那就显得很不合理了,因为 Jabba 并未在这个系统中提及。然而, phpGACL 在进行权限检查之前并不检查 ARO 对象或 ACO 对象是否存在,因此如果真被问及上述问题,则返回的结果将是缺省值"拒绝"。
  • ARO 树中也许并不显示某些已被定义的 ACO 对象,而是凭借缺省值来进行权限策略的设定。比如说 Han 定义了一个"浴室" ACO 对象,那么任何诸如" Luke 有权进浴室吗?"这样的问题将会得到"拒绝"这样的回答,因为在 ARO 树中没有任何地方明确地说明了浴室的权限而缺省的值又是"拒绝"。请记住检查 ARO 树时有些 ACO 对象也许是看不见的。

注意:当询问 phpGACL 系统对某个 ACO 对象的权限时,它不可能使用组来代替 ARO 对象的(尽管那看上去可能是合理的)。比如说象回答诸如"乘客是否有权进入武器室?"之类的问题,完整的回答不是一个简单的"允许"或"拒绝",而是更为复杂的" Luke Obi-wan 可以,而 R2D2 C3PO 不可以。" phpGACL 系统没有被设计成能返回这样的回答。

你可能感兴趣的:(PHP)