2013-04-01 3 views
1

Я пытаюсь использовать AuthComponent в CakePHP 2.3, но он не ведет себя так, как я ожидал.

В принципе, когда я

$ this-> Auth-> позволяют ('вид');

У пользователя должен быть доступ к методу просмотра, что и происходит так хорошо.

Проблема заключается в том, что когда пользователь входит в систему, он также имеет доступ к методу «добавить» (мой единственный другой метод в контроллере на данный момент. Когда он выходит из системы, у него нет доступа к добавить больше

Вот мой код:.

// AppController

<?php 
App::uses('Controller', 'Controller'); 

class AppController extends Controller { 

public $components = array(
    'Session', 
    'Auth' => array(
     'authenticate' => array(
      'Blowfish' => array(
       'fields' => array('username' => 'email', 'password' => 'password') 
      ) 
     ) 
    ) 

); 

public function beforeFilter() {  
    $this->Auth->deny('add'); 
    $this->Auth->allow('view'); 
} 

} 

Мой PagesController просто так:

<?php 
App::uses('AppController', 'Controller'); 

class PagesController extends AppController { 

public $uses = array('Pages'); 

public function view($id = null) { 
     echo 'In view'; 
    } 

public function add($id = null) { 
     echo 'In add'; 
    } 

} 

ответ

2

Вы недопонимаете, что разрешить()/deny(). В них указывается, можно ли получить доступ к действию с аутентификацией или без нее (например, login). Он не предназначен для контроля авторизации, т. Е. Контролирует доступ к действию после входа пользователя в систему. Для этого вы должны настроить авторизацию. Чтение this должно помочь вам лучше понять.

+0

Спасибо, сэр. Это то, о чем я беспокоился. Я предполагаю, что isAuthorized будет работать только с людьми, у которых есть учетные записи? – tkaravou

+0

Да 'isAuthorized' используется для авторизации и вступает в игру только после входа пользователя в систему. – ADmad

1

, если вы работаете на CakePHP 2.x вы должны сделать так:

function beforeFilter(){  
    $this->Auth->allow(array('action you want to allow1','action you want to allow2')); 
} 
  • позволяют (массив()) вместо того, чтобы позволить()

--- поставить этот код в контроллер имеет действие, которое вы хотите разрешить доступ без входа

Если вы используете $ this-> Auth-> allow(), вы должны вызвать parent :: beforeFilter(); в функции beforeFilter() следующим образом:

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

 Смежные вопросы

  • Нет связанных вопросов^_^