2013-03-11 3 views
9

У меня есть модуль bjyoungblood/bjy-authorize, но в настоящее время я получаю сообщение об ошибке «Доступ запрещен» для каждого URL-адреса, за исключением того, который настроен в маршруте home.Zend Framework 2 - BjyAuthorize всегда отрицает доступ

module.byjauthorize.global.php Мой выглядит следующим образом:

'bjyauthorize' => array(
    'guards' => array(
     'BjyAuthorize\Guard\Controller' => array(
      array('controller' => 'index', 'action' => 'index', 'roles' => array('guest','user')), 
      array('controller' => 'index', 'action' => 'stuff', 'roles' => array('user')), 
      array('controller' => 'zfcuser', 'roles' => array()), 
      //backend 
      array('controller' => 'Application\Controller\Index', 'roles' => array('admin')), 
      array('controller' => 'MyModule\MyEntity\MyEntity', 'roles' => array('admin')), 

     ), 

     'BjyAuthorize\Guard\Route' => array(
      array('route' => 'zfcuser', 'roles' => array('user')), 
      array('route' => 'zfcuser/logout', 'roles' => array('user')), 
      array('route' => 'zfcuser/login', 'roles' => array('guest')), 
      array('route' => 'zfcuser/register', 'roles' => array('guest')),     
      array('route' => 'home', 'roles' => array('admin')), 
      array('route' => 'my-entity', 'roles' => array('admin')), 
     ), 
    ), 
), 

Я попытался исключить BjyAuthorize\Guard\Route часть, но без эффекта. Когда я удаляю маршрут home, тогда домашняя страница также блокируется. Таким образом, работают как Controller, так и Route-Guard. Как я могу отладить это поведение?

+1

Является ли роль по умолчанию 'guest' установить? – Sam

+0

да. в конфигурации и в базе данных (вручную) – Ron

+0

Хм, ошибка в такой может быть довольно глубокой. Это рабочая конфигурация на моем конце, но я не защищаю маршруты или контроллеры: https://github.com/manuakasam/DuitMarketplace/blob/master/config/module.config.php#L92 контроллеры 'index' и' Application \ Controller \ Index' определенно разные? – Sam

ответ

10

Примечание: справедливо следующее для BjyAuthorize 1.2.*

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

После того, как вы удалили либо маршрут или конфиг к контроллеру охранника, вы можете:

  • Установка Zend Developer Tools, что позволяет иметь обзор в настоящее время набор Acl role, как на этой картинке:

    enter image description here

  • Проверьте, если вы настроили правильный провайдер идентификации: один по умолчанию использует идентификатор пользователя ZfcUser «s и смотрите его роль в user_role стол.

  • Убедитесь, что роль guest имеет доступ к общедоступным страницам, таким как контроллер zfcuser (для действий входа) или маршрут zfcuser/login.

Как Akrabat отметил, конфигурация для BjyAuthorize\Guard\Controller и BjyAuthorize\Guard\Route являются whitelists, которые в основном означает, что у вас есть доступ к роли по умолчанию guest настройки, если вы хотите, чтобы просмотреть страницы, являющиеся неаутентифицированными.

Как только охранник настроен, он блокирует доступ к любому не сконфигурированному ресурсу, поэтому убедитесь, что вы предоставили роль guest (или что бы вы ни сконфигурировали в $config['bjyauthorize']['default_role'], чтобы получить доступ хотя бы к контроллеру или маршруту входа.

+0

спасибо вам два! Я ошибся с дорогой к контроллерам ... такой тупой! афайк до сих пор все работает! – Ron

+1

@ Даже если ваша ошибка опечатка, я отредактировал вопрос, чтобы он не был слишком локализован (иначе он будет закрыт). Надеюсь, это тоже полезно для других :) – Ocramius

+0

спасибо, надеюсь, тоже :) – Ron

4

Как только вы создаете одну запись в массиве 'BjyAuthorize\Guard\Controller', вам необходимо создать записи для каждого контроллера с соответствующими разрешениями.

У меня есть это: (! Для входа в систему)

'BjyAuthorize\Guard\Controller' => array(
    // Access for everyone 
    array('controller' => 'zfcuser', 'roles' => array('guest')), 
    array('controller' => 'Application\Controller\Index', 'action' => 'index', 'roles' => array('guest')), 
    array('controller' => 'error', 'roles' => array('guest')), 

    // Restricted 
    array('controller' => 'User\Controller\AdminUser', 'roles' => array('admin')), 

), 

Очень важно, чтобы вы дать гостю доступ к zfuser и ошибок (трудно отлаживать материал в противном случае).

Я не пробовал одновременно использовать контроллер и охранники маршрутов.

1

У меня была такая же проблема.

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

'BjyAuthorize\Guard\Controller' => array(
      array('controller' => 'zfcuser', 'roles' => array()), 
     ), 

Вы бы ожидать, чтобы добавить свои контроллеры, как, например:

array('controller' => 'controllername', 'role' => array()), 

Однако вам нужно добавить полный путь, иначе она не будет работать:

array('controller' => 'Folder/Controller/Action', 'role' => array()), 

Надеюсь, это сэкономит кому-то несколько часов работы, так как я был полностью одурманен этим!

0

отлаживать код этим в module.php

public function onBootstrap($e) 
    { echo "<pre>"; 
     var_dump($e->getTarget()->getServiceManager()->get('BjyAuthorize\Provider\Identity\ProviderInterface')); 
    }