A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

17.15. Using the User Module

Felicidades, ahora nuestro Role Demo esta listo. Haremos un resumen de como podemos usarlo si planeamos basar nuestro sitio web en él.

Primero que todo, necesitamos crear todos los roles y permisos necesarios a través de la interfaz de usuario que creamos. Asignamos un role (o varios roles) para cada usuario del sitio.

Luego editamos el archivo de configuración module.config.php de nuestro módulo y agregamos dos llaves:

Un ejemplo de esta llave se presenta abajo:

// This key stores configuration for RBAC manager.
'rbac_manager' => [
    'assertions' => [Service\RbacAssertionManager::class],
],
'access_filter' => [
    'options' => [
        'mode' => 'restrictive'
    ],
    'controllers' => [
        Controller\IndexController::class => [
            // Allow anyone to visit "index" and "about" actions
            ['actions' => ['index', 'about'], 'allow' => '*'],
            // Allow authorized users to visit "settings" action
            ['actions' => ['settings'], 'allow' => '@']
        ],
    ]
],

El * y @ en la subllave allow no son las únicas opciones. Podemos hacer que la subllave permita el acceso a la página a:

Si nuestro sitio web tiene algunas aserciones dinámicas podemos extender el método assert() de la clase RbacAssertionManager que ya existe (o escribir y registrar nuestro propio gestor de aserciones):

public function assert(Rbac $rbac, $permission, $params)
{
    $currentUser = $this->entityManager->getRepository(User::class)
            ->findOneByEmail($this->authService->getIdentity());

    if ($permission=='post.own.edit' && $params['post']->getUser()->getId()==$currentUser->getId())
        return true;

    if ($permission=='post.own.publish' && $params['post']->getUser()->getId()==$currentUser->getId())
        return true;

    return false;
}

Si queremos revisar los permisos en una acción del controlador podemos usar el complemento de controlador Access de la siguiente manera:

if (!$this->access('profile.own.view', ['user'=>$user])) {
    return $this->redirect()->toRoute('not-authorized');
}

Si queremos revisar los permisos en una plantilla de vista podemos usar el ayudante de vista Access:

if ($this->access('profile.own.view', ['user'=>$user))) {
   // do something...
}

¡Esto es todo! ¡Así de simple! ¡Disfrútalo!


Top