Предоставить разрешение ACL по URL-адресам в Zend Framework 2

#php #permissions #zend-framework2 #acl

#php #разрешения #zend-framework2 #acl

Вопрос:

Я следую этому руководству: http://ivangospodinow.com/zend-framework-2-acl-setup-in-5-minutes-tutorial / Но я хочу предоставить разрешение по пользовательским URL-адресам, поэтому у меня были некоторые изменения в моем коде.

В module.acl.roles.php

 return array(
    'guest'=> array(
        '/home.html',
        '/login.html',
        '/register.html'
    ),
    'admin'=> array(
        '/user/add.html',
        '/user/edit.html',
        '/user/list.html',
    ),
);
 

В module.config.php

 return array(
    'router' => array(
        'routes' => array(
            '/home.html' => array(
                'type' => 'ZendMvcRouterHttpLiteral',
                'options' => array(
                    'route' => '/',
                    'defaults' => array(
                        'controller' => 'ApplicationControllerIndex',
                        'action' => 'index',
                    ),
                ),
            ),
            '/user/add.html' => array(
                'type' => 'ZendMvcRouterHttpRegex',
                'options' => array(
                    'regex' => '/user/add.html',
                    'defaults' => array(
                        'controller' => 'ApplicationControllerUser',
                        'action' => 'add',
                        'format' => 'html',
                    ),
                    'spec' => '/user/add.%format%',
                ),
            ),
            ...
        ),
    ),
);
 

Но я получил эту ошибку: Route with name "" not found . Пожалуйста, дайте мне несколько советов и решений для предоставления разрешений по URL-адресам

Спасибо!

Комментарии:

1. Я предлагаю вам взглянуть на github.com/bjyoungblood/BjyAuthorize вместо этого, а именно route guard

Ответ №1:

Я действительно очень рекомендую модуль BjyAuthorize (https://packagist.org/packages/bjyoungblood/bjy-authorize ).

Но если вы действительно хотите сделать это самостоятельно, вам нужно добавить слушателя в ZendMvcMvcEvent::EVENT_ROUTE .

Вы можете подключить своего слушателя с помощью

 $events->attach(MvcEvent::EVENT_ROUTE, array($this, 'myOnRoute'), -1000);
 

и в вашем методе myOnRoute вы можете обрабатывать маршрут

 public function myOnRoute(MvcEvent $event) {
  $match      = $event->getRouteMatch();
  $routeName  = $match->getMatchedRouteName();
  // do stuff here (compare to config or whatever)
}