Rumah > Artikel > pembangunan bahagian belakang > phpGACL汉语手册(九)扩展权限对象
phpGACL中文手册(九)扩展权限对象
在phpGACL中可以通过配置扩展权限对象(AXO对象)为第三方添加权限。我们已经知道了phpGACL是如何将ARO对象和ACO对象组成一个访问控制策略指令的,这主要用于简单的权限要求如:
Luke(ARO对象)要求访问"武器室"(ACO对象)的权限
如果这是你所需要的,那么AXO对象就完全是可选的了!
但是由于所有的ACO对象都是相同的,因此如果它们存在很多的话那管理起来将是困难的。如果是这样情况的话,我们可以通过改变思考权限对象方式来使其管理起来更加容易。
AXO对象在许多方面同ARO对象是一样的。这有一个AXO树(是从ARO树中分离出来的)有着自己的组和AXO对象。在处理AXO对象时,以看待ACO对象的方式来看待AXO对象(即"需要权限控制的事物"),而改变看待ACO对象的方式,从"需要权限控制的事物"变成"被要求的运作"。
看待只有ARO和ACO对象的方式:
看待ARO、ACO和AXO对象的方式:
例如:
一个网站管理员想要管理访问该网站中项目的权限。一个由所有用户组成的ARO树如下所示: Website(网站)
├─Administrators(管理者)
│ ├─Alice
│ └─Carol
└─Users(用户)
├─Bob
└─Alan
在AXO树中通过操作系统分类项目被组织成: Projects(项目)
├─Linux
│ ├─SpamFilter2
│ └─AutoLinusWorshipper
└─Windows
├─PaperclipKiller
└─PopupStopper
对于每个项目而言,动作是"观看"和"编辑"。这些是ACO对象。
现在我们想要Bob对所有的Linux项目有"观看"的权限,因此可以添加一个ADP将Bob的ARO对象与观看的ACO对象和Linux的AXO对象连接在一起。于是我们可以问一个问题:
Bob(ARO对象)要求对一个叫Linux的项目(AXO对象)有"观看"(ACO对象)的权限
记住AXO是可选的,如果你在调用acl_check()函数时没有指明AXO对象或匹配到一个没有AXO对象的ADP,这是允许的。然而如果只有AXO对象的APD而你却调用没有AXO对象的acl_check()函数,那么系统将失败。
所以一旦你在调用acl_check()函数时指定了AXO对象的话,acl_check()函数就只搜索含有AXO对象的ACL列表。如果AXO对象没有被指定,那么只有不含有AXO对象的列表才会被搜索。基于上述理论也使系统在性能上有所提升。