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:
rbac_manager
contendrá la configuración para el RbacManager
(particularmente la configuración del gestor o gestores de aserciones).Un ejemplo de esta llave se presenta abajo:
// This key stores configuration for RBAC manager.
'rbac_manager' => [
'assertions' => [Service\RbacAssertionManager::class],
],
access_filter
guarda las reglas de acceso para las páginas de
nuestro sitio web. Generalmente tiene el aspecto siguiente:'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:
*
).@
);@identity
, una identidad
representada
por una dirección de correo electrónico.+permission
,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!