使用できます
getRoles()
-登録された役割の配列を返します。
次に、これらのそれぞれをチェックします
inheritsRole()
- $roleが$inheritから継承する場合にのみtrueを返します
http://framework.zend.com/apidoc/core/Zend_Acl/Zend_Acl.htmlのAPIドキュメントZend_Acl
を参照してください
例
$parents = array();
foreach ($acl->getRoles() as $inherit) {
if ($acl->inheritsRole('owner', $inherit)) {
$parents[] = $inherit;
}
}
その後、次のようなものが返されます
Array
(
[0] => guest
[1] => member
[2] => admin
)
別
には実際にはgetParents()
メソッドがありますが、のパブリックインターフェイスを介してそれにアクセスするZend_Acl_Role_Registry
方法はないようですZend_Acl
。ソースコードを見る
ただしZend_Acl
、メソッドを持つように拡張するのは簡単です。getParentsForRole()
class My_Acl extends Zend_Acl
{
public function getParentsForRole($role)
{
return $this->_getRoleRegistry()->getParents($role);
}
}
ただし、これは直接の親のみを返します。たとえば、「owner」の場合は「admin」を返すため、別のメソッドを追加して、すべての親を最後の親まで再帰的にフェッチすることができます。
class My_Acl extends Zend_Acl
{
public function getAllParentsForRole($role, $parents = array())
{
foreach ($this->getParentsForRole($role) as $parentName => $parentRole) {
if (FALSE === isset($parents[$parentName])) {
$parents[$parentName] = $parentRole;
$parents = $this->getAllParentsForRole($parentRole, $parents);
}
}
return $parents;
}
public function getParentsForRole($role)
{
return $this->_getRoleRegistry()->getParents($role);
}
}
例
$acl = new My_Acl;
$acl->addRole('guest');
$acl->addRole('other');
$acl->addRole('member', 'guest');
$acl->addRole('admin', 'member');
$acl->addRole('owner', array('admin', 'other'));
print_r($acl->getAllParentsForRole('owner'));
結果として
Array
(
[admin] => Zend_Acl_Role Object
(
[_roleId:protected] => admin
)
[member] => Zend_Acl_Role Object
(
[_roleId:protected] => member
)
[guest] => Zend_Acl_Role Object
(
[_roleId:protected] => guest
)
[other] => Zend_Acl_Role Object
(
[_roleId:protected] => other
)
)
これは、1回の呼び出しで返される内容と一致していgetParents
ます。それが必要ない場合は、最初の例のforeachコードを使用することもできます。
class My_Acl extends Zend_Acl
{
public function getAllParentsForRole($role)
{
$parents = array();
foreach ($this->getRoles() as $inherit) {
if($this->inheritsRole($role, $inherit)) {
$parents[] = $inherit;
}
}
return $parents;
}
}