gracias por la respuesta, si cuando lo comento el script funciona muy bien, pero con el script me da eroor como dices como si no tuviera permisos, pero el mi libreria tengo el permiso de ir por lo menos al index de ese modulo, estoy debug el acl y el script con zend_debug::dump() y no como ya detectar el problema
, por favor te enviare mi codigo de la libreria y el pluguin haber si se me escapo algo.
este es la clase libreria de permisos
Código PHP:
class Model_LibreriaAcl extends Zend_Acl {
public function __construct() {
$this->addRole(new Zend_Acl_Role('default'));
$this->addRole(new Zend_Acl_Role('almacen'));
$this->addRole(new Zend_Acl_Role('administrador'));
/*
* Resource para el modulo Default Module/Controller
*
* Zend_Acl_Resource('module:controller')
*
*/
$this->add(new Zend_Acl_Resource('DEFAULT'));
$this->add(new Zend_Acl_Resource('DEFAULT:INDEX','INDEX'));
$this->add(new Zend_Acl_Resource('DEFAULT:ERROR','ERROR'));
$this->add(new Zend_Acl_Resource('DEFAULT:AUTENTIFICACION','LOGIN'));
/*
* Recursos para el modulo Almacen Module/Controller
* Zend_Acl_Resource('module:controller')
*/
$this->add(new Zend_Acl_Resource('ALMACEN'));
$this->add(new Zend_Acl_Resource('ALMACEN:INDEX','INDEX'));
/*
* Permisos para el modulo Default
*/
$this->allow('default', 'DEFAULT:INDEX', 'INDEX');
$this->allow('default', 'DEFAULT:ERROR', 'ERROR');
$this->allow('default', 'DEFAULT:AUTENTIFICACION', 'LOGIN');
/*
* Permisos para el modulo Almacen
*/
$this->allow('almacen','ALMACEN:INDEX','INDEX');
/*
*
*/
}
en el resource utilizo 'modulo:controller', 'action';
este el plugin q utilizao para verificar si tengo o no permisos
Código PHP:
class Plugin_VerificarAcceso extends Zend_Controller_Plugin_Abstract {
private $_acl = null;
public function __construct(Zend_Acl $acl) {
$this->_acl = $acl;
}
public function preDispatch(Zend_Controller_Request_Abstract $request) {
//Zend_Debug::dump($request);
$module = strtoupper($request->getModuleName());
$controller = strtoupper($request->getControllerName());
$action = strtoupper($request->getActionName());
$resource=$module.':'.$controller;
if (Zend_Auth::getInstance()->hasIdentity()) {
$rol= Zend_Auth::getInstance()->getStorage()->read()->NOM_TIPO_EMP;
} else {
$rol='default';
}
Zend_Debug::dump($rol);
Zend_Debug::dump($resource);
Zend_Debug::dump($action);
//Zend_Debug::dump(!$this->_acl->isAllowed($rol, $resource, $action));
if(!$this->_acl->isAllowed($rol, $resource, $action)){
$request->setModuleName('default');
$request->setControllerName('Autentificacion');
$request->setActionName('login');
}
}
}
aqui es donde ago los debug.
Este la configuracion de mi bootstrap
Código PHP:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initAutoLoad() {
$modelLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH . ''));
if (Zend_Auth::getInstance()->hasIdentity()) {
Zend_Registry::set('role', Zend_Auth::getInstance()->getStorage()
->read()->NOM_TIPO_EMP);
} else {
Zend_Registry::set('role', 'default');
}
$this->_acl = new Model_LibreriaAcl();
$this->_auth = Zend_Auth::getInstance();
$fc = Zend_Controller_Front::getInstance();
$fc->registerPlugin(new Plugin_VerificarAcceso($this->_acl));
return $modelLoader;
}
protected function _initPlugins() {
$this->bootstrap('frontController');
$plugin = new Plugin_VariosLayout();
$this->frontController->registerPlugin($plugin);
}
function _initViewHelpers() {
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$layout = Zend_Layout::getMVCInstance();
$layout->setLayout('layout');
}
}
y este es el controller la action login la forma como me logueo
Código PHP:
public function loginAction() {
$this->view->title = 'Login';
if (Zend_Auth::getInstance()->hasIdentity()) {
$this->_redirect('/almacen');
}
$request = $this->getRequest();
$form = new Form_Login();
if ($request->isPost()) {
if ($form->isValid($this->_request->getPost())) {
$authAdapter = $this->getAuthAdapter();
$login_usr = $form->getValue('login_usr');
$password_usr = $form->getValue('password_usr');
$authAdapter->setIdentity($login_usr)
->setCredential($password_usr);
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
$datos_empleado = $authAdapter->getResultRowObject(null,'PASSWORD_EMPLEADO');
$authStorage = $auth->getStorage();
$rol=$authStorage->read()->NOM_TIPO_EMP;
$authStorage->write($datos_empleado);
$this->_redirect('/almacen');
die('NO_REDIRECT');
} else {
$this->view->errorMessage = "Login o Password no son Validos !!!!!!";
}
}
}
$this->view->form = $form;
}
private function getAuthAdapter() {
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
$authAdapter->setTableName('EMPLEADO')
->setIdentityColumn('LOGIN_EMPLEADO')
->setCredentialColumn('PASSWORD_EMPLEADO');
return $authAdapter;
}
estos son las clases q utilizo, por favor nose enque esta mal, nose enque me equivoco ya no tengo cabeza, no se como solucionar el problema, porfavor una manito, les estare agradecido