2013-03-11 4 views
9

Mam skonfigurowany moduł bjyoungblood/bjy-authorize, ale aktualnie otrzymuję komunikat "odmowa dostępu" 403 dla każdego adresu URL z wyjątkiem adresu skonfigurowanego na trasie home.Zend Framework 2 - BJyAuthorize zawsze odmawia dostępu

Moi module.byjauthorize.global.php wygląda jak następujące:

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

Próbowałem usuwając BjyAuthorize\Guard\Route udział, ale bez skutku. Po usunięciu trasy home, strona główna jest również zablokowana. Wygląda na to, że zarówno kontroler, jak i strażnik trasy działają. Jak mogę debugować to zachowanie?

+1

jest domyślnym rola 'guest' ustawić? – Sam

+0

tak. w konfiguracji iw bazie danych (ręcznie) – Ron

+0

Hmm, błąd w takim może być dość głęboki. To działająca konfiguracja na moim końcu, ale nie chronię tras ani kontrolerów: https://github.com/manuakasam/DuitMarketplace/blob/master/config/module.config.php#L92 indeks kontrolerów 'i' Aplikacja \ Controller \ Index' są zdecydowanie inne? – Sam

Odpowiedz

10

UWAGA: Oto ważna BjyAuthorize 1.2.*

Przede wszystkim należy wziąć pod uwagę, że ochrona zarówno trasy i kontrolerów jest niepotrzebna. Osobiście zawsze chronię tylko kontrolery, ponieważ może istnieć wiele tras do tego samego kontrolera.

Po usunięte bądź trasy lub config strażnika sterownika, można:

  • Install Zend Developer Tools, który pozwala mieć przegląd aktualnie ustawiony Acl role, jak na tym zdjęciu:

    enter image description here

  • Sprawdź, czy masz skonfigurowane odpowiedniego dostawcę tożsamości: jedna domyślna wykorzystuje identyfikator użytkownika ZfcUser „s i patrzy w górę swoją rolę w user_role stół.

  • Sprawdź, czy rola guest ma dostęp do publicznych stron, takich jak kontroler zfcuser (w przypadku działań logowania) lub zfcuser/login.

Jak Akrabat wskazał, konfiguracja dla BjyAuthorize\Guard\Controller i BjyAuthorize\Guard\Routewhitelists, co w zasadzie oznacza, że ​​masz dostęp do konfiguracji domyślnej guest rolę, jeśli chcesz przeglądać strony zostaną un-uwierzytelnione.

Po skonfigurowaniu osłony blokuje dostęp do dowolnego nieskonfigurowanego zasobu, więc upewnij się, że nadałeś rolę guest (lub cokolwiek skonfigurowałeś w $config['bjyauthorize']['default_role'] dostęp przynajmniej do kontrolera logowania lub trasy.

+0

dziękuję wam! Popełniłem błąd na ścieżce do kontrolerów ... tak głupi! Afai aż do teraz wszystko wydaje się działać! – Ron

+1

@Ron pomimo tego, że Twoim błędem jest literówka, zredagowałem pytanie tak, aby nie było zbyt zlokalizowane (w przeciwnym razie zostanie zamknięte). Mam nadzieję, że jest to przydatne także dla innych :) – Ocramius

+0

dziękuję, mam nadzieję, że tak, też :) – Ron

4

Zaraz po utworzeniu jednej pozycji w tablicy 'BjyAuthorize\Guard\Controller' należy utworzyć wpisy dla każdego kontrolera z odpowiednimi uprawnieniami.

mam to: (! Przy logowaniu)

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

), 

To ważne, aby dać gościowi dostęp do zfuser i błędów (trudne do debugowania rzeczy inaczej).

Nie próbowałem jednocześnie używać kontrolerów i osłon trasy.

1

Miałem dokładnie ten sam problem.

Myślę, że problem polega na tym, że BjyAuthorize nie jest dobrze udokumentowany, więc wielu z nas po prostu kopiuje i wkleja i opracowuje z dostarczonych plików. Na przykład spośród następujących:

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

można oczekiwać, aby dodać kontrolerów jako takie:

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

Jednak trzeba dodać pełną ścieżkę w przeciwnym razie nie będzie działać:

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

Mam nadzieję, że to oszczędza komuś kilka godzin pracy, ponieważ byłem totalnie oszołomiony tym!

0

debugowania kodu przez to w Module.php

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