¿Una forma fácil de cargar ACL en Zend Framework 2?
zend-framework2 (5)
He estado siguiendo esta guía para cargar la configuración de mi menú y creo que es una manera muy agradable y limpia de cargar el menú.
Mi pregunta es simple, ¿hay alguna manera de cargar su configuración de ACL de la misma manera con una matriz de configuración y algo así como de fábrica?
Si no es así, ¿cómo cargo una configuración de ACL y la uso con ese menú de una manera fácil?
¡Gracias!
Editar: Esta es una muy buena publicación de blog sobre por qué usar módulos que ya está hecho y no hacer los suyos, http://hounddog.github.com/blog/there-is-a-module-for-that/
ZF2 contiene ACL y también RBAC (ACL basado en roles, puede estar en ZF2.1), pero para ponerlo en su lugar, es más fácil usar un módulo que puede conectar a su aplicación. BjyAuthorize me parece un poco hinchado, tienes que usar el módulo ZfcUser. Prefiero ZfcRbac , las reglas de ACL se basan en roles de usuario (grupo) y su acceso a controlador, acción o ruta. Configuración almacenada en un archivo de configuración, realmente fácil de implementar.
Lo más probable es que haya varias formas de hacerlo, pero prefiero hacerlo en getViewHelperConfig()
de getViewHelperConfig()
de la aplicación (aquí BjyAuthorize
módulo BjyAuthorize
para simplificar el trabajo con ACL y, en particular, permite establecer reglas de ACL en el module.bjyauthorize.global.php
archivo de configuración module.bjyauthorize.global.php
)
public function getViewHelperConfig()
{
return array(
''factories'' => array(
''navigation'' => function($sm) {
$auth = $sm->getServiceLocator()->get(''BjyAuthorize/Service/Authorize'');
$role = $auth->getIdentityProvider()->getIdentityRoles();
if (is_array($role))
$role = $role[0];
$navigation = $sm->get(''Zend/View/Helper/Navigation'');
$navigation->setAcl($auth->getAcl())->setRole($role);
return $navigation;
}
)
);
}
Tiene razón, no hay una solución out-of-the-box-all-in-one. Tienes que construir algunos puentes entre los módulos.
Otra forma sencilla de integrar BjyAuthorize es utilizar los métodos predeterminados de ** Zend Navigation ** como describe Rob Allen: Integrar BjyAuthorize con ZendNavigation
$sm = $e->getApplication()->getServiceManager();
// Add ACL information to the Navigation view helper
$authorize = $sm->get(''BjyAuthorizeServiceAuthorize'');
$acl = $authorize->getAcl();
$role = $authorize->getIdentity();
ZendViewHelperNavigation::setDefaultAcl($acl);
ZendViewHelperNavigation::setDefaultRole($role);
También puede usar ZfcRbac y usar un oyente para que funcione con Zend Navigation .
Como este es un montón de código, simplemente publico el enlace aquí: Compruebe los permisos de la página de Zend Navigation con ZfcRbac - Blog de Webdevilopers
Juega con esta estructura. obtenga rol y recurso de la base de datos y guárdelo en sesión para cualquier almacenamiento en caché.
Acabo de crear un módulo de ACL que crea un servicio de ACL analizando las rutas.
Para administrar su control de acceso a su aplicación, solo necesita definir roles y agregar una nueva clave ''roles'' en cada ruta. Si no define esa clave o su matriz está vacía, entonces la ruta se vuelve pública. También funciona con rutas secundarias.
Como ejemplo:
array(
''router'' => array(
''routes'' => array(
''user/users/view'' => array(
''type'' => ''Segment'',
''options'' => array(
''route'' => ''/admin/users/view/id/:id/'',
''constraints'' => array(
''id'' => ''[0-9]+'',
),
''defaults'' => array(
''controller'' => ''User/Controller/Users'',
''action'' => ''view'',
''roles'' => [''admin'', ''user''],
),
),
),
),
),
);
El módulo se puede instalar a través de compositor y ahora está listado en el repositorio de módulos zend: http://zfmodules.com/itrascastro/TrascastroACL
Puede obtener información más detallada sobre el uso y la instalación desde mi blog: http://www.ismaeltrascastro.com/acl-module-zend-framework/