Pregunta ¿Una forma fácil de cargar ACL en Zend Framework 2?


He estado siguiendo esta guía para cargar la configuración de mi menú y creo que es una forma 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 la 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 propios, http://hounddog.github.com/blog/there-is-a-module-for-that/


5
2017-11-18 08:33


origen


Respuestas:


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. Bjy Autorizar Me parece un poco hinchado, tienes que usar el módulo ZfcUser. yo 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, muy fácil de implementar.


5
2017-11-18 22:38



Lo más probable es que haya varias formas de hacerlo, pero prefiero hacerlo en getViewHelperConfig() de aplicación Module.php (aquí uso BjyAuthorize módulo para simplificar el trabajo con ACL y, en particular, permite establecer reglas de ACL en el 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;
            }
        )
    );
}

5
2017-11-18 10:54



Juega con esta estructura. obtenga el rol y los recursos de la base de datos y guárdelo en una sesión para o cualquier almacenamiento en caché

Play with This structure


3
2017-08-25 05:43



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 manera fácil de integrar Bjy Autorizar está utilizando los métodos predeterminados de ** Zend Navigation ** como lo describe Rob Allen: Integración de 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 puedes usar ZfcRbac y usa un oyente para que funcione Zend Navigation.

Dado que 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


1
2018-06-03 12:03



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, la ruta se vuelve pública. También funciona con rutas infantiles.

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 de zend: http://zfmodules.com/itrascastro/TrascastroACL

Puede obtener información más detallada sobre el uso y la instalación de mi blog: http://www.ismaeltrascastro.com/acl-module-zend-framework/


1
2018-02-26 21:57