2012-01-23 9 views
0

私は新しいモジュールadminをセットアップしました。したがって、私はこのモジュールにwww.example.com/adminで完全にアクセスできますが、もちろんこれは管理者だけがアクセスできるようにしたいのです。さて、コントローラーは明らかにアクションだけでなく「インデックス」です。私はあまりにもコントローラとアクション「インデックス」を得たwww.example.comにアクセスするすべての人を、したいよう。しかし、私は私のACLをプラグインに次の行があります。Zend Framework double Aclモジュールを使用したリソース

$acl->add(new Zend_Acl_Resource('index')); 
$acl->add(new Zend_Acl_Resource('admin:index')); 

$acl->allow(null, array('index')); 

// admins can do anything 
$acl->allow('administrator', null); 

をしかし、これはのために動作するようです管理モジュールもあります。管理者モジュールから一般ユーザを制限するには?私はすでに試みた

$acl->deny('guest', 'admin:index', 'index'); 

しかし、これは動作していないようです。ヘルプは非常に感謝しています。ありがとう、貧しい私の英語のために申し訳ありません。

よろしくお願いいたします。

+1

どこにでもロールを定義しましたか?すなわち:guestとadministrator – RockyFord

+0

もちろん私がやった;) –

答えて

1

私は管理者とユーザーのフロントエンドと別々のACLの両方で別々のセッション名前空間を使用することがよくあります。

adminパネルのセッションを別にすると、adminのZend_Authセッションがユーザーセッションから完全に隔離されているため、ログインしたユーザーはACLに関係なく管理セクションにアクセスできなくなります。

ここでは、Zend_Authを拡張するadmin用のクラスを使用します。 getInstanceでは、ストレージをデフォルトのZend_Authとは異なるセッション名前空間に設定する方法に注目してください。

<?php 

class My_Admin_Auth extends Zend_Auth 
{ 
    protected function __construct() 
    {} 

    protected function __clone() 
    {} 

    public static function getInstance() 
    { 
     if (null === self::$_instance) { 
      self::$_instance = new self(); 
      self::$_instance->setStorage(new Zend_Auth_Storage_Session('Zend_Auth_admin')); 
     } 

     return self::$_instance; 
    } 

    /** 
    * Get an auth adapater instance suitable for authenticating agains 
    * the administrator database. 
    * @param string $username 
    * @param string $password 
    * @return Zend_Auth_Adapter_DbTable Adapter used to call $auth->authenticate($adapter); 
    */ 
    public static function getAdapter($username, $password, $usersalt) 
    { 
     $db = Zend_Controller_Front::getInstance() 
            ->getParam('bootstrap') 
            ->getResource('db'); 

     $authAdapter = new Zend_Auth_Adapter_DbTable($db, 
                'administrators', 
                'username', 
                'password'); 

     $authAdapter->setIdentity($username) 
        ->setCredential($password) 
        ->setCredentialTreatment(
         'SHA1(CONCAT(?,"' . $usersalt . '"))' 
        ); 

     return $authAdapter; 
    } 

    /** 
    * Return a SHA-1 hashed and salted version of the entered password 
    * @param string $plaintext Password to hash, a static salt is also applied 
    * @return string the hashed password 
    */ 
    public static function hashAdminPassword($plaintext, $usersalt) 
    { 
     return sha1($plaintext . $usersalt); 
    } 
} 

それに代わるものとして、あなたは、クラスをインスタンス化するときに、ユーザーが管理者である場合にのみ許可するルールを追加し、デフォルトですべてを否定し、あなたの管理エリアに別々のACLを定義することができます。

関連する問題