Cakephp 2.2 AuthComponent + Níveis de acesso por controller
Eae galera, sou novo no cakephp e estava querendo fazer um sisteminha de autenticação simples, aonde eu não vejo a necessidade de usar acl acredito eu que apenas o auth resolva o meu problema.
A situação é a seguinte, tenho uma tabela com os usuarios aonde nessa propria tabela está os niveis de acesso, 0 para usuario comun e 1 para admin, e eu teria os controllers /admin e /user, oque eu não estou conseguindo fazer é que os usuários logados como user invadam a área do /admin. Segue o código.
AppController.php
<?php
App::uses('Controller', 'Controller');
class AppController extends Controller {
public $components = array(
'Auth',
'Session'
);
public $helpers = array('Html', 'Session');
public function beforeFilter()
{
$this->Auth->authenticate = array(
AuthComponent::ALL => array(
'userModel' => 'User',
'fields' => array(
'username' => 'username',
),
'scope' => array(
'User.status' => 1,
),
),
'Form',
);
$this->Auth->authorize = 'controller';
$this->Auth->loginAction = array(
'plugin' => null,
'controller' => 'users',
'action' => 'login',
);
$this->Auth->logoutRedirect = array(
'plugin' => null,
'controller' => 'users',
'action' => 'login',
);
$this->Auth->loginRedirect = array(
'plugin' => null,
'controller' => 'users',
'action' => 'index',
);
$this->Auth->authError = __('Você não possui autorização para executar esta ação.');
$this->Auth->allowedActions = array('display');
}
public function isAuthorized($user)
{
//somente o admin tem acesso a /admin/controller/action ? Isso não está funcionando!
if (!empty($this->request->params['admin'])) {
return $user['nivel'] == 1;
}
return !empty($user);
}
}
UsersController.php
<?php
class UsersController extends AppController {
public $name = 'Users';
public $uses = array('User');
public function beforeFilter()
{
parent::beforeFilter();
}
public function index()
{
$this->set('title_for_layout', __('Bem vindo usuario'));
}
public function login()
{
$this->set('title_for_layout', __('Log in'));
if ($this->request->is('post')) {
if ($this->Auth->login()) {
if($this->Auth->user('nivel') == 'admin'){
$this->redirect('/admin/index');
}else{
$this->redirect('/users/index');
}
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash($this->Auth->authError, 'default', array(), 'auth');
$this->redirect($this->Auth->loginAction);
}
}
}
public function logout()
{
$this->Session->setFlash(__('Deslogado com sucesso.'), 'default', array('class' => 'success'));
$this->redirect($this->Auth->logout());
}
?>
Desde já agradeço qualquer ajuda! =)
Discussão (1)
Carregando comentários...