2011-02-24 3 views
2

navigation.xml 파일에서 제공하는 데이터로 Zend_Navigation을 실행하고 있습니다. 첫 번째 레벨 (0)이 Frontend와 Backend의 두 페이지로 구성된다고 가정 해 봅시다. 프런트 엔드는 게스트 역할 인 액세스 권한에 의해서만 백엔드에 액세스 할 수 있습니다.Zend_Navigation : 현재 사용자/역할이 액세스 할 수있는 페이지 만 가져 오기

내가 할 경우

<?php echo $this->navigation()->menu()->setMaxDepth(0); ?> 

관리자로 로그인 할 때 제대로 로그인하지 "프런트 엔드"링크를 표시하고 모두 "프런트 엔드"와 "백엔드"링크.

그러나 "프론트 엔드"링크를 표시하는 것은 게스트에게 그다지 중요하지 않습니다. 어쨌든 다른 페이지로 이동할 수 없기 때문입니다. 그래서 손님을 위해 내비게이션을 전혀 표시하지 않을 것입니다.

은 내가

<?php 
if ('guest' !== $this->view->role) { 
    echo $this->navigation()->menu(); 
} 
?> 

할 수있는 알고 있지만 나는이 작업을 수행하는 더 나은 방법을 바라고 있어요.

내가 찾고 내가 Zend_Navigation에서 제공하는 API와이를 달성하는 방법을 알아낼 수 없습니다

<?php 
if (count($this->navigation()->getPagesForRole($this->view->role)) > 1) { 
    echo $this->navigation()->menu(); 
} 
?> 

같은 것을 ... 나는 getPages() 메소드가 참조하지만, 그것은 "필터링되지 않은"모든 페이지를 반환합니다.

나는 이것에 대한 쉬운 해결책이 있다고 가정하지만, 지난 두 시간 동안 이것을 알아 내려고 노력했지만 아무 것도 발견하지 못했기 때문에 잘못된 방향으로보고 있습니다.

감사합니다.

편집 : 내가 탐색 이미 권한을 제어하기 위해 ACL을 사용하고, 잘 작동하고 있음을 언급하는 것을 잊었다

. 내 유일한 문제는 하나의 링크 항목 탐색만으로는 쓸모가 없으므로 게스트의 Frontend/Backend 탐색을 표시하고 싶지 않다는 것입니다. 혼란을 드려 죄송합니다.

답변

0

당신은 당신은 Zend_NavigationZend_Acl를 통합 할 수 있습니다 그것은

0

작업 할 수 있습니다이
Zend_Navigation에 대한 Zend_ACL를 사용할 수 있습니다. Look here.

5

Zend Navigation에서는이를 달성하기 위해 Zend_Acl 인스턴스가 필요합니다. 네비게이션 설정을 조정하여 리소스/권한 정보를 포함해야합니다 (예 :

$navArray = array(
…, 
    array(
     'module' => 'admin', 
     'label' => 'Administration', 
     'resource' => 'admin', 
     'privilege' => 'index', 
     'pages' => array( 
    … 
); 

http://framework.zend.com/manual/en/zend.navigation.containers.html

그런 다음 당신이 그 자원과 권한에 대한 액세스 제한을 정의하여 ACL을 설정해야합니다 참조하십시오.

$acl = new Zend_Acl(); 
    $acl->addRole(new Zend_Acl_Role('user')) 
     ->addRole(new Zend_Acl_Role('admin')); 

    … 

http://framework.zend.com/manual/en/zend.acl.introduction.html

귀하의 ACL은 그 후

$this->getHelper('Navigation') 
    ->setAcl($acl) 
    ->setRole('user'); 

현재 사용자의 역할과 함께, 탐색 도우미로 설정해야합니다 참조 도우미 API에 대한 호출해야한다 ACL을 알고 있습니다. 위의 예에서 사용자가 ACL에서 ACL에 액세스 할 수 없으면 관리자 메뉴가 렌더링되지 않아야합니다.

추가 자료 : 상세한 답변

+0

감사합니다. 이미 Zend_Acl을 사용하고 있다는 사실을 잊어 버렸습니다. 미안합니다. – jgxvx

+0

@jgxvx 손님이 탐색의 항목에 대한 액세스 권한이 없는지 확인하십시오. – Gordon