2012-04-10 3 views
0

입니다. 그렇기 때문에 인증 정보가 데이터베이스에 있으면 사용자를 제한된 영역으로 안내하는 사용자 로그인 시스템으로 zf 애플리케이션을 가지고 있습니다. 그러나 사용자 로그인이 admin (DB에서)이고 관리자 섹션에 직접 연결되어 있는지 확인하기 위해 동일한 로그인 양식을 원합니다 ... 저는 Zend_Acl을 사용하여이 작업을 수행하는 방법에 대해 고민하고 있습니다. 또한 ACL에 대한 유일한 사용은 admin 섹션에 admin 역할을하는 사용자를 허용하는 것입니다. 저는 ZF에 대해 상당히 새로운 것입니다. 그래서 가장 좋은 접근법이 무엇인지 모르겠습니다. 여기에 AuthController에 대한 현재 코드가 있습니다.Zend Framework 사이트의 Admin 섹션에 대한 ACL은

http://codepaste.net/6hzydv

감사

답변

2

당신은 사용자가 자신의 역할에 따라 컨트롤러 /보기에 액세스 할 수있는 권한이 있는지를 결정하는 컨트롤러 플러그인을 만들 수 있습니다. Zend Aclhttp://blog.richardknop.com/2009/06/user-login-and-authentication-with-zend_auth-and-zend_acl/

+0

이 블로그 게시물을 보았지만 프레임 워크에 대한 지식이 부족하여 각 파일의 위치를 ​​파악할 수 없었습니다. 뷰 컨트롤러를 사용하여 무언가를 필요로합니다. l 그리고 더 깊이있는 설명. .. – Rik89

+0

체크 아웃'Zend_Controller_Plugin_Acl' – Alex

0

읽기 문서를하고 권한을 부여하고 사용자 유형을 상속하는 방법을 이해 : 당신은 여기 단계 튜토리얼에 의해 단계를 볼 수 있습니다

class My_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     $auth = Zend_Registry::getInstance()->get('auth'); 
     $acl = new Zend_Acl(); 

     // for default module 
     if ($request->getModuleName() == 'default') { 

      // access resources (controllers) 
      // usually there will be more access resources 
      $acl->add(new Zend_Acl_Resource('index')); 
      $acl->add(new Zend_Acl_Resource('error')); 

      // access roles 
      $acl->addRole(new Zend_Acl_Role('guest')); 
      $acl->addRole(new Zend_Acl_Role('user')); 
      $acl->addRole(new Zend_Acl_Role('administrator')); 

      // access rules 
      $acl->allow('guest'); // allow guests everywhere 
      $acl->allow('user'); // allow users everywhere 
      $acl->allow('administrator'); // allow administrators everywhere 

      $role = ($auth->getIdentity() && $auth->getIdentity()->status = 'approved') 
      ? $auth->getIdentity()->role : 'guest'; 
      $controller = $request->getControllerName(); 
      $action = $request->getActionName(); 

      if (!$acl->isAllowed($role, $controller, $action)) { 
       $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector'); 
       $redirector->gotoUrlAndExit('error/denied'); 
      } 

     } 
     // for member module 
     else if ($request->getModuleName() == 'member') { 

      // access resources (controllers) 
      // usually there will be more access resources 
      $acl->add(new Zend_Acl_Resource('index')); 
      $acl->add(new Zend_Acl_Resource('error')); 

      // access roles 
      $acl->addRole(new Zend_Acl_Role('guest')); 
      $acl->addRole(new Zend_Acl_Role('user')); 
      $acl->addRole(new Zend_Acl_Role('administrator')); 

      // access rules 
      $acl->allow('user'); // allow users everywhere 
      $acl->allow('administrator'); // allow administrators everywhere 

      $role = ($auth->getIdentity() && $auth->getIdentity()->status = 'approved') 
      ? $auth->getIdentity()->role : 'guest'; 
      $controller = $request->getControllerName(); 
      $action = $request->getActionName(); 

      if (!$acl->isAllowed($role, $controller, $action)) { 
       $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector'); 
       $redirector->gotoUrlAndExit('error/denied'); 
      } 

     } 
     // for admin module 
     else if ($request->getModuleName() == 'admin') { 

      // access resources (controllers) 
      // usually there will be more access resources 
      $acl->add(new Zend_Acl_Resource('index')); 
      $acl->add(new Zend_Acl_Resource('error')); 

      // access roles 
      $acl->addRole(new Zend_Acl_Role('guest')); 
      $acl->addRole(new Zend_Acl_Role('user')); 
      $acl->addRole(new Zend_Acl_Role('administrator')); 

      // access rules 
      $acl->allow('administrator'); // allow administrators everywhere 

      $role = ($auth->getIdentity() && $auth->getIdentity()->status = 'approved') 
      ? $auth->getIdentity()->role : 'guest'; 
      $controller = $request->getControllerName(); 
      $action = $request->getActionName(); 

      if (!$acl->isAllowed($role, $controller, $action)) { 
       $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector'); 
       $redirector->gotoUrlAndExit('error/denied'); 
      } 

     } 
    } 
} 

:처럼 뭔가. 그런 다음 이것을 공정하게 확인하십시오 simple Zend tutorial on Zend Acl & MVC.

은 기본적으로 당신은 다음을 수행해야합니다 :

  1. 설정 ACL 규칙 어딘가에 부트 스트랩에
  2. 상자 error/denied.phtml (또는 무엇이든 내선 사용하는)
  3. 당신을 위해 더러운 일을하는 Zend_Controller_Plugin_Acl하자