Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/12/2014, 15:40
albertcito
 
Fecha de Ingreso: diciembre-2007
Mensajes: 169
Antigüedad: 16 años, 11 meses
Puntos: 6
Pregunta ACL y menú de navegación

En mi módulo.php llamo a mi plugin para que verifique los permisos de los usuarios según el rol, y si no tiene permiso lo reenvió a una página.

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
            
);
        }
    } 
Esta función ejecuta mi plugin

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_name0strpos($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(); 

    }

__________________
Inspiracion