2013-10-02 58 views
0

我在視圖中檢查角色和資源與Zend_Acl允許的內容顯示特定的內容。 這工作正常,但我想有一個像hasParentResource()方法來檢查資源的父母。

一個例子:

$acl->add(new Zend_Acl_Resource('default')); 
$acl->add(new Zend_Acl_Resource('admin')); 
$acl->add(new Zend_Acl_Resource('admin::resource1'), 'admin'); 
$acl->add(new Zend_Acl_Resource('admin::resource2'), 'admin'); 
$acl->add(new Zend_Acl_Resource('admin::resource3'), 'admin'); 

/roles 
$acl->addRole(new Zend_Acl_Role('guest')); 
$acl->addRole(new Zend_Acl_Role('user'), 'guest'); 
$acl->addRole(new Zend_Acl_Role('admin'), 'user'); 

//deny/allow 
$acl->deny(); 
$acl->allow('guest', 'default'); 

$acl->allow('user', array(
    'admin::resource1', 
    'admin::resource3' 
)); 

$acl->allow('admin'); 

在視圖:

<h1>Admin</h1> 
Lorem ipsum dolor... 
<?php if($this->acl->hasParentResource('admin')): ?> 
    <h2>Resources</h2> 
    <?php if($this->acl->isAllowed('admin::resource1')): ?> 
     Ressource 1 stuff 
    <?php endif; ?> 
    <?php if($this->acl->isAllowed('admin::resource2')): ?> 
     Ressource 2 stuff 
    <?php endif; ?> 
    <?php if($this->acl->isAllowed('admin::resource3')): ?> 
     Ressource 3 stuff 
    <?php endif; ?> 
<?php endif; ?> 

的想法是隱藏包括<h2>標籤的內容,如果用戶沒有訪問資源1,2或3個。
我知道,我可以這樣寫:

<?php if($this->acl->isAllowed('admin::resource1') || $this->acl->isAllowed('admin::resource2') || $this->acl->isAllowed('admin::resource3')): ?> 
    <h2>Resources</h2> 
    ... 
<?php endif; ?> 

但是我沒有這三種資源,如果我改變了某些東西,我不想爲這些語句添加新的資源。

回答

0

使用inheritsRole函數。

這樣的:

if($this->acl->inheritsRole('user', 'admin')) { 
    /* display content for an admin */ 
} 
+0

我不想因作用下做的,但這是一個很好的提示!我現在使用'$ this-> acl-> inherits($ resource,'admin')'。謝謝! – StinsonMaster

相關問題