2013-10-02 2 views
0

특정 컨텐츠를 보여주기 위해 Zend_Acl을 사용하여 허용 된 컨텐츠를 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'); 

:

개념은 사용자가 자원에 대한 액세스 권한이없는 경우, <h2> 태그를 포함하는 콘텐츠를 숨긴다
<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; ?> 

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