El asunto es que en mi layout.phtml tengo un menú, pero para el rol "editor" debo elimnar unas opciones del menú, he estado leyendo que al parecer se pude pasar el acl al layout e imprimr un menú con de acuerdo al rol actual, pero por más que intento no me funciona.
Alguien sabe como hacerlo así como para dummies, please.
O sea lo que quiero hacer, es que si es "admin" aparezcan todas las opciones del menú, si es "editor" que aparezcan algunas menos, por ejemplo.
¿Pero como verifico en el layout que permiso tiene? :( ayudaa !!!!! He buscado lo de view->navigator pero desde el plugin no tengo la variable $view
Aquí estan mis códigos como valido el rol y el usuario, dentro de mi archivo Module.php tengo esta función que llamo desde la función onBootstrap
Código PHP:
public function loadConfiguration(MvcEvent $e)
{
$application = $e->getApplication();
$sm = $application->getServiceManager();
$sharedManager = $application->getEventManager()->getSharedManager();
$router = $sm->get('router');
$request = $sm->get('request');
$matchedRoute = $router->match($request);
if (null !== $matchedRoute) {
$params = $matchedRoute->getParams();
$controller = $params['controller'];
$action = $params['action'];
$sharedManager->attach(
'Zend\Mvc\Controller\AbstractActionController','dispatch',
function($e) use ($sm,$controller,$action) {
$sm->get('ControllerPluginManager')->get('Myplugin')
->doAuthorization($e,$controller,$action);
},2
);
}
}
Código PHP:
class Myplugin extends AbstractPlugin
{
private $auth;
protected $sesscontainer ;
public function __construct() {
$this->auth = new AuthenticationService();
}
public function doAuthorization($e,$controller_name,$action_name)
{
$identi = $this->auth->getStorage()->read();
$namespace = substr($controller_name, 0, strpos($controller_name, '\\'));
//No ha iniciado sesión
if( $identi==false || $identi==null ){
if( !($namespace =='Usuarios' && $action = "login") )
$this->sinPermiso($e);
return;
}
$acl = new Acl();
//add role ..
$acl->addRole(new Role('Anonimo'));
$acl->addRole(new Role('Editor'), 'Anonimo');
$acl->addRole(new Role('Admin'), 'Editor');
$acl->addResource(new Resource('Actas'));
$acl->addResource(new Resource('Usuarios'));
$acl->addResource(new Resource('Carreras'));
$acl->addResource(new Resource('IC'));
$acl->allow('Anonimo', 'Usuarios', array('login','autenticado','cerrar'));
$acl->allow('Editor', 'Usuarios', 'index');
$acl->allow('Editor', 'Actas',
array(
'index',
'editando',
'completadas',
'ver',
'nuevo',
'editar',
'eliminar',
'pdf',
'buscarCarreras',
'buscarUsuarios'
)
);
//admin is child of user, can publish, edit, and view too !
$acl->allow('Admin',
array('Actas'),
array('publish', 'edit')
);
$role = (! $identi->permisos ) ? 'Anonimo' : $identi->permisos;
$controller = $e->getTarget();
$controller->layout()->nombres = $identi->nombres;
$controller->layout()->sexo = $identi->sexo;
$controller->layout()->id_usuario = $identi->id_usuario;
$pages = array(array(
'label' => 'Actas',
'uri' => 'javascript:;',
'pages' => array(
array(
'label' => 'Listar Actas',
'route' => 'actas',
'controller' => 'actas',
'action' => 'index',
),
array(
'label' => 'Nueva Actaa',
'route' => 'actas',
'controller' => 'actas',
'action' => 'nuevo',
)
)
));
//no tiene permisos para ingresar a esa vista
if ( ! $acl->isAllowed($role, $namespace, $action_name)){
$this->sinPermiso($e);
}
}
public function sinPermiso($e){
$router = $e->getRouter();
$url = $router->assemble(array(), array('name' => 'usuarios'));
$response = $e->getResponse();
$response->setStatusCode(302);
$response->getHeaders()->addHeaderLine('Location', $url);
$e->stopPropagation();
}
}