2010-05-08 11 views
9

Tengo un "Posts" y un controlador "Users". Uso el Auth Component y quiero que todos los usuarios puedan visitar "Post.index", pero solo los usuarios que inician sesión pueden visitar "User.index".CakePHP Auth cómo permitir controlador específico y acciones

En mi app_controller.php tengo unas pocas cosas

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

pero con que todos los usuarios pueden visitar post.index y user.index. ¿Cómo puedo especificar un controlador en el método de permitir?

esto no funcionó para mí:

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

actualización Quité 'índice' de la app_controller.php y en lugar de ponerlo en el método beforeFilter en el controlador de mensaje:

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

También establecí una variable "loggedIn" en app_controller, sin llamar a "parent :: beforeFilter();" Recibí un aviso de "variable indefinida".

THX sibidiba

Respuesta

13

El período no funcionará. Puede intentar '/' en su lugar. Si eso también falla, debe establecer $this->Auth->allow('index') en PostController y UserController's ::beforeFilter() individualmente. No olvides llamar al padre :: beforeFilter().

+3

Perfect answer! No funcionó con '/' por lo que eliminó 'índice' de la app_controller y permitió que en el controlador de mensaje: función beforeFilter() { \t parent :: beforeFilter(); \t $ this-> Auth-> allow ('index'); } –

1

Estoy usando CakePHP 2.x. El truco de barra no funciona.

Si desea permitir el acceso de usuarios "myController.myAction" sin inicio de sesión, se debe añadir beforeFilter() en lugar de myController.php AppController.php

Este es el código para agregar en myController.php:

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

Depende de la versión en la que esté trabajando. Si se trata de cakephp 2.x, coloque este código en el controlador que tiene la acción que desea dar acceso sin iniciar sesión. Como su pregunta, usted debe poner el código de controlador de Posts:

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

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

0

$ this-> name devuelve controlador de corriente requerida.

probar esto en AppController :: beforeFilter()

public function beforeFilter() 
{ 

    // ... Basic configs 

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

Lo siento, mi Inglés no es bueno

1

para CakePHP 2.x, hay varios métodos (dependiendo de la versión cakephp).

De la documentación (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

En 3.x torta que usted puede usar debajo de las líneas de código para permitir todas las acciones.

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