2011-09-05 4 views
1

내 Zend_Navigation을 제대로 작동시키지 못합니다.Zend Framework PHP에서 Zend_ACL을 사용하여 Zend_Navigation에서 여러 역할 지정하기?

AUth/Doctrine을 사용하여 사용자를 로그인 할 때, 다 대다수의 사용자에게 할당 된 역할 (일반적으로 그 중 일부) 많은 테이블,

다음은 bootstrap.php 온라인 : $ view-> navigation ($ navContainer) -> setAcl ($ this -> _ acl) -> setRole ($ this -> _ role);

오류가 발생합니다. '$ role은 문자열, null 또는 Zend_Acl_Role_Interface의 인스턴스 여야합니다. 배열은 '주어진

그러나 만약의 foreach와 역할을 통해 I 루프 - 이전의 역할은 다음과 같은 것들에 의해 덮어 쓰기하고 난 단지 마지막 역할에 대한 탐색을 얻을

사람이에 대한 논리적 인 해결책이 있습니까?

정말 아담

답변

1

저도 같은 문제를 가지고 있지만 약간 다른 각도에서 해결책에 접근, 감사드립니다. 두 개 이상의 역할을 허용하도록 Zend_Navigation 개체를 수정하는 대신 Zend_Acl을 확장하고 isAllowed() 메서드를 수정하여 모든 역할에 대해 확인했습니다. Zend_Navigation 개체는 isAllowed() 메서드를 사용하므로이 문제를 재정의하면 문제가 해결됩니다.

My_Acl.php

<pre><code> 
class My_Acl extends Zend_Acl 
{ 
    public function isAllowed($role = null, $resource = null, $privilege = null) 
    { 
     // Get all the roles to check against 
     $userRoles = Zend_Registry::get('aclUserRoles'); 
     $isAllowed = false; 

     // Loop through them one by one and check if they're allowed 
     foreach ($userRoles as $role) 
     { 
      // Using the actual ACL isAllowed method here 
      if (parent::isAllowed($role->code, $resource)) 
      { 
       $isAllowed = true; 
      } 
     } 

     return $isAllowed; 
    } 
} 
</code></pre> 

다음, 대신 Zend_Acl의 인스턴스를 만드는, My_Acl를 사용하여 탐색 개체에 그것을 통과하고 작동합니다.

0

isAllowed()를 재정의 한 적이 없으며 해결 방법이 있습니다. Zend_Acl_Role_Interface를 구현하는 클래스를 만들고 메모리가 제공되면 getRole() 메서드 하나만 정의하면됩니다. 실제로이 클래스를 사용하여 사용자를 인증하고 해당 클래스가 역할 결정을 처리하도록 허용하는 모델이 될 수 있습니다. 사용자는 단일 역할 만 가져야합니다. 리소스에 대한 액세스 권한이 여러 역할의 사용자에게만 부여되지만 특정 조건에서만 허용되는 경우 해당 리소스가있는 이유를 주장해야합니다.