2011-11-23 3 views
0

내 관리 모듈에 전자 메일 컨트롤러가 있는데 관리자 만 로그인하면 대부분의 작업에 액세스 할 수 있어야합니다. 그러나 나는 누구에게나 접근 할 수있는 하나의 행동을 원한다. (URL을 통해 원격으로 실행되는 이메일 기능입니다.) 순간 나는이 같은 Zend_Acl로 Zend_Auth 사용하고 있습니다 : 젠드 - 컨트롤러/액션 ACL

if ($request->getModuleName() == 'admin') { 
    // access resources (controllers) 
    $acl->addResource('index'); 
    $acl->addResource('reports'); 
    $acl->addResource('email'); 
    $acl->addResource('error'); 

    // access roles 
    $acl->addRole(new Zend_Acl_Role('visitor')); 
    $acl->addRole(new Zend_Acl_Role('user')); 
    $acl->addRole(new Zend_Acl_Role('admin')); 

    // access rules 
    $acl->deny('visitor'); 
    $acl->deny('user'); 
    $acl->allow('admin'); 

    $resouce = $request->getControllerName(); 
    $action = $request->getActionName(); 
    $identity = $auth->getStorage()->read(); 
    if (is_object($identity)) { 
     $role = $identity->role; 
    } else { 
     $role = 'visitor'; 
    } 

    if (!$acl->isAllowed($role, $resouce, $action)) { 
     $request->setModuleName('default') 
       ->setControllerName('auth') 
       ->setActionName('login'); 
    } 
} 

어떻게/관리자/이메일/공정 행동 '방문자'할 수 있도록 위의 코드를 변경합니까?

답변

2

이 트릭을 수행해야합니다

$oAcl->allow('visitor','email','functionname'); 
//or if you want to do both visitor and user 
$oAcl->allow(array('visitor','user'),'email','functionname'); 

이미 작성한 액세스 규칙 후이 코드를 넣습니다.

+0

에 젠드 프레임 워크 공식 문서를 참조 할 수 있습니다,이 허용됩니다? – Owen

+0

예, isAllowed 검사가 이미 실행되었습니다. – Ilians

3

Zend_Acl을 사용하여 역할 계층을 만들면 역할이 x 이상의 권한을 가진 사람이 액세스 할 수있는 페이지에 액세스 할 수있는 최소 역할을 설정할 수 있습니다.

$acl->addRole(new Zend_Acl_Role('visitor')); 
$acl->addRole(new Zend_Acl_Role('user'), 'visitor'); 
$acl->addRole(new Zend_Acl_Role('admin'), 'user'); 

이 방법은 관리 역할을 가진 사람은 아무거나 visitor에 액세스 할 수 있으며, user가 액세스 할 수 있습니다.

array을 문자열 대신 매개 변수로 전달할 수도 있습니다. 함수가 다음 명시 적으로 허용되지 않은 또 다른 보호 기능을 호출하는 경우

이 더 많은 정보는, ACL 또한