2010-05-08 16 views
9

Ho un "Post" e un controller "Utenti". Io uso la componente Auth e voglio che tutti gli utenti possano visitare "Post.index", ma solo gli utenti registrati possono visitare "User.index".CakePHP Auth come consentire controller e azioni specifiche

Nel mio app_controller.php ho questo

$this->Auth->allow('signup', 'confirm', 'index'); 

ma con che tutti gli utenti possono visitare post.index e user.index. Come posso specificare un controller nel metodo allow?

Questo non ha funzionato per me:

$this->Auth->allow('signup', 'confirm', 'Post.index'); 

aggiornamento ho rimosso 'index' dal app_controller.php e invece lo misi nel metodo beforeFilter nel controller posta:

function beforeFilter() 
{ 
    parent::beforeFilter(); 
    $this->Auth->allow('index'); 
} 

Ho anche impostato una variabile "loggedIn" in app_controller, senza chiamare "parent :: beforeFilter();" Ho ricevuto una notifica "variabile non definita".

thx sibidiba

risposta

13

Il periodo non funzionerà. Potresti provare '/' invece. In caso contrario, è necessario impostare in PostController e UserController's ::beforeFilter() singolarmente. Non dimenticare di chiamare parent :: beforeFilter().

+3

Risposta perfetta! Non ha funzionato con '/' così ho rimosso 'index' dal app_controller e le ha permesso nel controller posta: funzione beforeFilter() { \t parent :: beforeFilter(); \t $ this-> Auth-> allow ('index'); } –

1

Sto usando CakePHP 2.x. Il trucco della barra non funziona.

Se si desidera consentire l'accesso degli utenti "myController.myAction" senza effettuare il login, è necessario aggiungere beforeFilter() in myController.php invece di AppController.php

Ecco il codice per aggiungere in myController.php:

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('myAction'); 
} 
1

A seconda della versione su cui si sta lavorando. Se è cakephp 2.x, inserisci questo codice nel controller che ha l'azione che vuoi consentire l'accesso senza effettuare il login. Come la tua domanda, si dovrebbe mettere questo codice a Post controllore:

function beforeFilter(){ 
    $this->Auth->allow(array('index','another action'));} 

allow(array('acction you want to allow')) invece allow('acction you want to allow')

0

$ this-> name restituisce controller corrente richiesta.

provare questo in AppController :: beforeFilter()

public function beforeFilter() 
{ 

    // ... Basic configs 

    switch ($this->name) { 
     case 'Posts': 
      $this->Auth->allow('add'); 
      break;    
     case 'Test': 
      $this->Auth->allow('test'); 
      break; 
    } 
} 

Siamo spiacenti, il mio inglese non è buono

1

Per CakePHP 2.x, ci sono diversi metodi (a seconda della versione cakephp).

Dalla documentazione (http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html):

// Allow all actions. CakePHP 2.0 
$this->Auth->allow('*'); 

// Allow all actions. CakePHP 2.1 
$this->Auth->allow(); 

// Allow only the view and index actions. 
$this->Auth->allow('view', 'index'); 

// Allow only the view and index actions. 
$this->Auth->allow(array('view', 'index')); 
0

In 3.x torta che può usare sotto le righe di codice per consentire tutte le azioni.

public function beforeFilter(Event $event) { 
     parent::beforeFilter($event); 
     $this->Auth->allow(); 
    } 
Problemi correlati