2012-04-10 6 views
0

だから、資格情報がデータベースにある場合、人を制限された領域に誘導するユーザーログインシステムを使用してzfアプリケーションを使用します。しかし、私はユーザーの役割が管理者(DB内)であるかどうか、そして管理者セクションにそれらがあるのか​​どうかをチェックするために同じログインフォームを使いたいと思います...私はZend_Aclを使ってこれをどうやって行うのか悩んでいます。 ACLの唯一の用途はadminの役割を持つユーザーに管理セクションを許可することですが、私はかなり新しいZFですので、最良のアプローチが何であるかはわかりません。サイトの管理セクションのZend Framework ACL

http://codepaste.net/6hzydv

おかげ

答えて

2

あなたは、ユーザーが自分の役割に基づいて、コントローラ/ビューにアクセスする権限を持っているかどうかを判断しますコントローラプラグインを作成することができます。ような何か:Zend Aclhttp://blog.richardknop.com/2009/06/user-login-and-authentication-with-zend_auth-and-zend_acl/

+0

私はこのブログの記事を見ましたが、フレームワークの知識が少なすぎて、各ファイルがどこに行くのかわかりませんでした。より深く説明しています。 – 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をしましょう
関連する問題