2013-03-11 1 views
9

Ho installato il modulo bjyoungblood/bjy-authorize, ma attualmente ricevo un errore di "accesso negato" 403 per ciascun URL eccetto per quello configurato nella route home.Zend Framework 2 - BjyAuthorize nega sempre l'accesso

miei module.byjauthorize.global.php appare come segue:

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

ho provato a cancellare la parte BjyAuthorize\Guard\Route, ma senza alcun effetto. Quando rimuovo il percorso home, anche la home page è bloccata. Quindi sia Controller che Route Guard sembrano funzionare. Come posso eseguire il debug di questo comportamento?

+1

è il ruolo predefinito 'guest' set? – Sam

+0

sì. nella configurazione e nel database (manualmente) – Ron

+0

Hmm, l'errore in tale può essere piuttosto profondo. Questa è una configurazione funzionante da parte mia, ma non sto proteggendo rotte o controller: https://github.com/manuakasam/DuitMarketplace/blob/master/config/module.config.php#L92 i controller 'index' e' Applicazione \ Controller \ Index' sono decisamente diversi? – Sam

risposta

10

NOTA: seguente è valida per BjyAuthorize 1.2.*

Prima di tutto, si consideri che la tutela sia i percorsi e controllori non è necessaria. Io personalmente proteggo sempre solo i controller, poiché potrebbero esserci più percorsi per uno stesso controller.

Una volta rimosso sia il percorso o di configurazione della guardia di controllo, è possibile:

  • Installare Zend Developer Tools, che permette di avere una panoramica del attualmente impostato Acl role, come in questa immagine:

    Verificare di aver configurato il provider di identità corretto: quello predefinito utilizza l'ID utente di ZfcUser e cerca il suo ruolo nell'user_role tabella.

  • Verificare che il ruolo guest abbia accesso alle pagine pubbliche, ad esempio il controller zfcuser (per le azioni di accesso) o il percorso zfcuser/login.

Come akrabat ha sottolineato, la configurazione per il BjyAuthorize\Guard\Controller e BjyAuthorize\Guard\Route sono whitelists, che sostanzialmente significa che si deve impostare l'accesso per il ruolo predefinito guest se si desidera sfogliare le pagine che sono non autenticato.

Non appena una guardia è configurato, blocca l'accesso a qualsiasi risorsa non configurato, in modo da essere sicuri di aver concesso il ruolo guest (o qualsiasi altra cosa si è configurato nel $config['bjyauthorize']['default_role'] accesso almeno il controller di accesso o percorso.

+0

grazie a voi due! Ho fatto un errore con il percorso verso i controllori ... così stupido! afaik fino ad ora tutto sembra funzionare! – Ron

+1

@Ron anche se il tuo errore è un refuso, ho modificato la domanda in modo che non sia troppo localizzata (altrimenti verrà chiusa). Spero che questo sia utile anche ad altri :) – Ocramius

+0

grazie, lo spero anch'io :) – Ron

4

Non appena si crea una voce nell'array 'BjyAuthorize\Guard\Controller', è necessario creare voci per ogni controller con autorizzazioni appropriate.

ho questo: (! Per il login)

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

), 

E 'importante che vi darà l'accesso a ospiti zfuser e l'errore (difficile da roba di debug in altro modo).

Non ho provato a utilizzare controller e route guard contemporaneamente.

1

Ho avuto lo stesso identico problema.

Penso che il problema sia che BjyAuthorize non è ben documentato, quindi molti di noi stanno semplicemente copiando e incollando e lavorando sui file forniti. Per esempio tra i seguenti:

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

Ci si potrebbe aspettare per aggiungere i controller in quanto tale:

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

Tuttavia è necessario aggiungere il percorso completo, altrimenti non funzionerà:

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

Spero che questo salvi qualcuno a poche ore di lavoro, dato che sono rimasto completamente confuso da questo!

0

debug del codice da questo in module.php

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