私のプロジェクトでzend ACLを実装しようとしていますが、私は3つの問題に直面しています。 これはコードで問題を説明するには、次のzend aclモジュール式の実装ですか?
マイライブラリのプラグインクラス
class Mylib_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)) {
$role = 'default';
} else {
$role = $identity->Role;
}
if (!$this->_acl->isAllowed($role, $module, $recourse)) {
$request->setModuleName('Admin')
->setControllerName('User')
->setActionName('index');
}
}
}
これはこれはbootstarpに_initAppAutoloadあるモデルフォルダ
class Application_Model_DbTable_LibraryAcl extends Zend_Acl {
public function __construct() {
$this->addRole(new Zend_acl_Role('default'));
$this->addRole(new Zend_acl_Role('User'));
$this->addRole(new Zend_acl_Role('Admin'), 'User');
$this->add(new Zend_Acl_Resource('Admin'))
->add(new Zend_Acl_Resource('default'))
;
$this->allow('Admin')
->deny(array('User', 'default'));
}
}
の私のACLクラスです
$acl = new Application_Model_DbTable_LibraryAcl();
$auth = Zend_Auth::getInstance();
$fc = Zend_Controller_Front::getInstance();
$fc->setControllerDirectory(array('default' => '/../application/modules/default/controllers',
'Admin' => '/../application/modules/Admin/controllers'));
$fc->registerPlugin(new Hyderlib_Controller_Plugin_AccessCheck($acl, $auth));
1)最初の問題は、どのようにA pplication_Model_DbTable_LibraryAcl私は管理者とデフォルトのフォルダを持つモジュール化された実装を持っていますか、またはどのように各モジュールのリソースツリーを作成できますか?
2)私のデータベースにはデフォルトの役割はありませんが、私はこのデフォルトのユーザーにアカウントを作成せずに前提を設定したいと思っています(そのため、私は役割のIDをチェックし、それはデフォルトになります)。そうすること、あるいは論理的にすることがベストプラクティスですか?
3)モジュールとコントローラだけでなく、アクションの_isAllowedメソッドでMylib_Controller_Plugin_AccessCheckクラスをチェックインするにはどうすればよいですか?また、リダイレクトのこの方法はまた、私のエラーを与えている
は、ここで適切に