2

現在、ユーザー アクセスに Zend_Auth を使用するアプリケーションがあります。このサイトには、データベースで管理者の役割を持つ 1 人のユーザーが自分の資格情報を使用するときにアクセスを許可する管理セクションがあります。これを行う唯一の方法は Zend_Acl ですか? 私がやりたいことは少し複雑に思えますか、それとも私の問題に対するより簡単な解決策はありますか?

私はこれについて考えましたが、ユーザー用と管理セクション用に 1 つずつ、2 つの認証コントローラーを使用できるかどうか疑問に思っています。

4

2 に答える 2

2

私は最近、このようなことをしました。ユーザー資格情報をチェックする管理モジュール用のフロント コントローラー プラグインを作成します。何かのようなもの:

class Admin_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{    
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        if ($request->getModuleName() != 'admin'){
            return;
        }
        $auth = Zend_Auth::getInstance();
        if (!$auth->hasIdentity()){
            // send him to login
        }
        $user = $auth->getIdentity();
        if (!$user->isAdmin()){ // or however you check
            // send him to a fail page
        }
    }    
}
于 2012-04-24T15:54:42.280 に答える
0

ユーザーが管理者である場合、データベースに「is_admin」フィールドを1に設定する方法を使用することにしました。次に、次のコードを使用します。

public function init()
{
    $this->auth=Zend_Auth::getInstance();
    if ($this->auth->getStorage()->read()->is_admin) {
    $route = array('controller'=>'admin', 'action'=>'index');
    } else {
        $route = array('controller'=>'index', 'action'=>'index');
    $this->_helper->redirector->gotoRoute($route);
    }
}

これにより、ユーザーが管理者でない場合は管理領域からリダイレクトされ、管理者である場合はアクセスが許可されます。アプリケーションでの単純な使用のために、ACL よりも実装がはるかに簡単です。

于 2012-04-26T11:29:17.410 に答える