Простой способ загрузить ACL в Zend Framework 2?

Я следил за этим руководством, чтобы загрузить моя конфигурация меню, и я думаю, что это очень хороший и чистый способ загрузки меню.

Мой вопрос прост, есть ли способ загрузить конфигурацию ACL таким же образом с массивом конфигурации и какой-то фабрикой?

Если нет, как мне загрузить конфигурацию ACL и легко использовать это меню?

Спасибо!

Изменить: это очень хороший пост в блоге о том, зачем использовать уже готовые модули, а не создавать свои собственные, http://hounddog.github.com/blog/there-is-a-module-for-что/


person Rickard    schedule 18.11.2012    source источник


Ответы (5)


ZF2 содержит ACL, а также RBAC (ACL на основе ролей - может быть в ZF2.1), но для его установки проще использовать модуль, который вы можете подключить к своему приложению. BjyAuthorize кажется мне немного раздутым, вы должны использовать модуль ZfcUser. Я предпочитаю ZfcRbac, правила ACL основаны на ролях пользователей (группах) и их доступе к контроллеру, действию или маршруту. Конфигурация хранится в одном конфигурационном файле, что очень легко реализовать.

person Zdenek Machek    schedule 18.11.2012
comment
Да, все это похоже на добавление так много кода для чего-то, что было так просто в ZF1. Я думаю, мне придется использовать такие модули, чтобы сделать это. - person Rickard; 20.11.2012

Скорее всего есть несколько способов сделать это, но я предпочитаю делать это в getViewHelperConfig() приложения Module.php (здесь я использую BjyAuthorize< /a> модуль для упрощения работы с ACL, в частности позволяет задавать правила ACL в конфигурационном файле 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;
            }
        )
    );
}
person Denis Ryabov    schedule 18.11.2012
comment
Я использую что-то вроде это в ZF1, очень просто и понятно. Мне кажется странным, что я не могу найти что-то настолько простое для ZF2. Все эти модули кажутся слишком сложными. - person Rickard; 18.11.2012
comment
Такой способ тоже возможен (Zend\Permissions\Acl\Acl почти идентичен Zend_Acl), а BjyAuthorize позволяет писать меньше кода для добавления Acl в проект. Похоже, что нет исчерпывающего руководства по объединению Acl, аутентификации, навигации и т. д. Я только гуглил: p0l0.binware.org/index.php/2012/02/18/ samsonasik.wordpress.com/2012/08/23/< /а> - person Denis Ryabov; 18.11.2012

Поиграйте с этой структурой. получить роль и ресурс из базы данных и сохранить их в сеансе для любого кэширования.

Играть с этой структурой

person Saurabh Chandra Patel    schedule 25.08.2014
comment
В моем случае я поместил role_id в пользовательскую таблицу, потому что у меня никогда не было случая для связанной таблицы пользовательской роли... - person tasmaniski; 29.09.2015

Вы правы, универсального решения не существует. Вы должны построить некоторые мосты между модулями.

Еще один простой способ интеграции BjyAuthorize — использование стандартных методов **Zend Navigation**, описанных Робом Алленом: Интеграция BjyAuthorize с 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);

Вы также можете использовать ZfcRbac и прослушиватель, чтобы он работал с Zend Navigation.

Так как это много кода, я просто размещаю ссылку здесь: Проверьте разрешения страницы навигации Zend с помощью ZfcRbac – Блог Webdevilopers

person webDEVILopers    schedule 03.06.2014

Я только что создал модуль ACL, который создает службу ACL, анализирующую маршруты.

Чтобы управлять контролем доступа к вашему приложению, вам нужно только определить роли и добавить новый ключ «роли» в каждый маршрут. Если вы не определяете этот ключ или его массив пуст, маршрут становится общедоступным. Он также работает с дочерними маршрутами.

В качестве примера:

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'],
                    ),
                ),
            ),
        ),
    ),
);

Модуль можно установить через композитор, и теперь он указан в репозитории модулей Zend: http://zfmodules.com/itrascastro/TrascastroACL

Вы можете получить более подробную информацию об использовании и установке в моем блоге: http://www.ismaeltrascastro.com/acl-module-zend-framework/

person itrascastro    schedule 26.02.2015