ACLを許可しないロールを特定のページにリダイレクトさせるには、URLを変更せずに必要なページにユーザーをルーティングして問題なく動作している。したがって、ユーザがログインせずに管理インデックスページ(localhost/Admin)に移動しようとしていると仮定すると、ACLプラグインはユーザをログインページに誘導しますが、URL(localhost/Admin/Login)は変更しません。なぜこのようなことが起こっているのでしょうか?Zend_controller_request_ URLが変更されていない
class Hyderlib_Controller_Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract {
private $_acl = null;
private $_auth = null;
public function __construct(Zend_Acl $acl, Zend_Auth $auth) {
$this->_acl = $acl;
$this->auth = $auth;
}
public function preDispatch(Zend_Controller_Request_Abstract $request) {
$module = $request->getModuleName();
$recourse = $request->getControllerName();
$action = $request->getActionName();
$identity = $this->auth->getStorage()->read();
if (!isset($identity)) {
$role = 'default';
} else {
$db = Zend_Db_Table::getDefaultAdapter();
$Role = $db->select()->from('User_Account')->where('Email = ?', $identity);
$result = $db->fetchRow($Role);
$role = $result['Role'];
}
if (!$this->_acl->isAllowed($role, $module, $recourse, $action)) {
$request->setModuleName('Admin')
->setControllerName('Login')
->setActionName('index');
}
//$role = $identity->Role;
}
}
私は、これは、任意の違いを行う場合は、以下のコードはをpreDispatchでのZendコントローラプラグインで使用されていることを示すために全体のコードを提供します。前方
$request->setModuleName('Admin')
->setControllerName('Login')
->setActionName('index');
するだけで行きたかったURLに彼をリダイレクトすることができたときに内部リダイレクトのもう一つの利点は、彼に彼を送信するために、ユーザの利便です彼がログインした後の予定された目的地ですが、私はセッションでそれを保存します。ログインにリダイレクトする。ログインに成功すると、彼を目的の宛先にリダイレクトします。この方法では、彼のロケーションバーの表示されたURLは実際に彼がその時点で行っていた機能を反映しています。再:無限のリダイレクトループ:確かに、常に危険です。しかし、通常は、ログインページからACL制限を削除/除外します。結局のところ、それはログインページのためのものです。 –