Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá.
Quanto tempo!
Estou trabalhando com cakephp 1.3 ainda, ultimamente larguei um pouco o cakephp e parti para o CodeIgniter.
Em um projeto em Cake 1.3, estou precisando urgentemente implementar um login simples com níveis de acesso com prefixo, onde as actions são renomeadas com "admin_index" ou "user_index", etc...
/config/core.php
Configure::write('Routing.prefixes', array('admin', 'user'));
/config/routes.php
Router::connect('/', array('controller' => 'users', 'action' => 'index'));
Router::connect('/admin', array('controller' => 'users', 'action' => 'index', 'admin' => true));
Router::connect('/users', array('controller' => 'users', 'action' => 'index', 'user' => true));
/**
* ...and connect the rest of 'Pages' controller's urls.
*/
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Eu fiz uma vez com prefixos, sem AuthComponent, mas é um lixo, se eu vacilar, fica uma brecha na segurança --'.
Além do mais preciso que o usuário seja redirecionado para seu nível de acesso mesmo, tanto ele realizando o login, quanto ele acessando uma action diretamente.
Não consigo ajuda nisso =\
class AppController extends Controller {
// Componentes utilizados por toda a aplicacao
//var $components = array('Session', 'Cookie', 'Auth');
var $components = array(
'Auth' => array('autoRedirect' => false),
'Cookie', 'Session',
);
var $_User = array();
function afterFilter() {
# Update User last_access datetime
if ($this->Auth->user()) {
$this->loadModel('User');
$this->User->id = $this->Auth->user('id');
$this->User->saveField('last_access', date('Y-m-d H:i:s'));
}
}
public function beforeFilter() {
//$this->Auth->allow('*');
$this->Auth->authorize = 'controller'; //autorização feita pelo auth nos controladores, usando a função isAuthorized
// Model de usuários
$this->Auth->userModel = 'Users';
// Campos de usuário e senha
$this->Auth->fields = array(
'username' => 'email',
'password' => 'senha'
);
// Condição de usuário ativo/válido (opcional)
$this->Auth->userScope = array(
'User.ativo' => true
);
// Action da tela de login
$this->Auth->loginAction = array(
//'admin' => false,
'controller' => 'users',
'action' => 'login'
);
// Action da tela após o login (com sucesso)
$this->Auth->loginRedirect = array(
//'admin' => true,
'controller' => 'users',
'action' => 'home'
);
// Action para redirecionamento após o logout
$this->Auth->logoutRedirect = array(
//'admin' => false,
'controller' => 'users',
'action' => 'login'
);
// Mensagens de erro
$this->Auth->loginError = __('Usuário e/ou senha incorreto(s)', true);
$this->Auth->authError = __('Você precisa fazer login para acessar esta página', true);
// Case admin
$this->loadModel('User');
$group_admin = array('1' => 'admin','user');
$this->set(compact('group_admin'));
$this->_User = $this->Session->read('User');
$user = $this->_User;
$this->set('user', $user);
if (isset($user) AND !empty($user) AND isset($this->Auth->user('group_id'))) {
switch ($this->Auth->user('group_id')) :
case 1 :
// Aqui eh nivel de admin
break;
case 2 :
// Aqui eh nivel de usuario
break;
default :
// Mata sessao e redireciona para login, ou libera estas views
endswitch;
}
}
function isAuthorized() {
return true; //pode ser mais complexo, fazendo verificações antes de autorizar com true;
}
}
E o controller de login é:
class UsersController extends AppController {
var $components = array('Session', 'Cookie', 'Auth');
function login() {
if (!empty($this->data) && $this->Auth->user()) {
$this->User->id = $this->Auth->user('id');
$this->User->saveField('last_login', date('Y-m-d H:i:s'));
$this->redirect($this->Auth->redirect());
}
}
// Redireciona o usuário para o action do logoutRedirect
function logout() {
$this->Session->setFlash('You are now logged out');
$this->redirect($this->Auth->logout());
}
/**
* Public
*/
function index() {
//
}
/**
* Administration
*/
function admin_index() {
//
}
/**
* User panel
*/
function user_index() {
//
}
}Carregando comentários...