Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
preciso restringir o acesso a qualquer action acessado pela rota /admin.
Consigo fazer a restrição apenas a action users (/admin/users) mas ele não faz com o resto (/admin/blog por exemplo)
estou fazendo da seguinte forma:
AppControler:
class AppController extends Controller {
var $name = 'App';
var $components = array('Auth', 'Session');
print_r($this->params['admin']);
function beforeFilter() {
if (isset($this->params['admin'])) {
$this->Auth->deny('*');
}$this->Auth->allow('*'); // permite todas as que não forem admin
}
$this->Auth->userModel = 'Admin';//$this->Auth->authorize = 'controller'; //autorização feita pelo auth nos controladores, usando a função isAuthorized
$this->Auth->autoRedirect = true; //ativado redireciona o usuário para a requisição anterior que foi negada após o login
//$this->Auth->loginAction = array('controller' => 'usuarios', 'action' => 'login', 'admin' => false); //o usuário é redirecionado para esta ação caso não esteja autenticado
$this->Auth->logoutRedirect = array('controller' => 'pages', 'action' => 'home', 'admin' => false); //redireciona após o logout
$this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'home', 'admin' => true); //redireciona após login
$this->Auth->loginError = 'Usuário e/ou senha inválidos'; //mensagem caso o login não tenha sucesso
$this->Auth->authError = 'Você não tem permissão para acessar esta área'; //mensagem caso o usuário acesse uma área restrita
}
function isAuthorized() {
return true; //pode ser mais complexo, fazendo verificações antes de autorizar com true;
}
}
}
?>
Users (controler):
<?php
class UsersController extends AppController {
var $name = 'Users';
var $components = array('Auth');
function admin_login(){} // é tudo automagic, não precisa alterar nada que o Auth se encarrega do resto
function admin_logout(){
$this->Session->setFlash("Até +"); //cria a mensagem de despedida
$this->redirect($this->Auth->logout()); //finaliza a sessão e redireciona para a logoutRedirect
}
}
?>
Users (view):
<h2>Login</h2>
<?php
echo $form->create('User',
array('url' => array(
'controller' => 'users',
'action' =>'login')));
echo $form->input('username');
echo $form->input('password',array('type'=>'password'));
echo $form->end('Login');
?>
Alguém sabe como posso resolver isso? de forma que funcione em toda a rota /admin ?
Obrigado :)
>
Eu testei esse código e funcionou. Ficou assim:
class AppController extends Controller {
var $components = array('Auth', 'Session');
function beforeFilter() {
$this->Auth->logoutRedirect = array('controller' => 'main_pages', 'action' => 'index');
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'view');
$this->Auth->loginError = 'email ou senha inválidos';
$this->Auth->authError = 'Você precisa fazer o login';
Security::setHash('sha256');
if(isset ($this->params['admin'])){
$this->Auth->deny('*');
}else{
$this->Auth->allow('*');
}
/* esta é a segunda opção */
// if(Configure::read('Routing.prefixes')){
// $this->Auth->deny('*');
// }else{
// $this->Auth->allow('*');
// }
}
}
class UsersController extends AppController {
var $name = 'Users';
function admin_index() {
if (isset ($this->params['admin'])) {
$this->Session->setFlash(__('administrador', TRUE));
}
}
function admin_login() {
}
function index() {
$this->User->recursive = 0;
$this->set('users', $this->paginate());
}
}
/* no core.php, habilitei a linha 88
* Enables:
* admin_index() and /admin/controller/index
* manager_index() and /manager/controller/index
*
* [Note Routing.admin is deprecated in 1.3. Use Routing.prefixes instead]
*/
linha 88 Configure::write('Routing.prefixes', array('admin'));
Com esse código, localhost/master/admin/users/index me direcionava para localhost/master/admin/users/login, pois tudo era
negado ($this->Auth->deny('*')). E localhost/master/users/index carregava tranquilo.
Depois troquei deny('') por allow('') e localhost/master/admin/users/index carregava sem problemas.
menino_levado, fiz do jeito que você sugeriu... mas não deu resultado :(
do jeito que eu fiz, ele 'bloqueia' só o /admin/users mas ou outros (/admin/musica por exemplo) fica acessível.
Preciso resolver isso hoje =/
Tentei de várias formas, mas com nenhuma consegui o resultado esperado (bloquear toda rota /admin)
Olá amigo
tudo bom?
Tente isso:
App Controller
#no before filter add:
$this->Auth->authorize = 'controller';
agora crie a função isAuthorized()
function isAuthorized(){
#verifica se está setado o admin
if(!isset($this->params['admin'])){
return true;
}else{
return false;
}
}
se nao for isso avisa que iremos te ajudar nem que precise desenvolver outra app pra testar isso!
abraços
>
Olá amigo
tudo bom?
Tente isso:
App Controller
#no before filter add:
$this->Auth->authorize = 'controller';
agora crie a função isAuthorized()
function isAuthorized(){
#verifica se está setado o admin
if(!isset($this->params['admin'])){
return true;
}else{
return false;
}
}
se nao for isso avisa que iremos te ajudar nem que precise desenvolver outra app pra testar isso!
abraços
Eduardo, já tinha tentado isso =/
O engraçado é que eu já consegui fazer isso, mas 'bloqueado' tudo. e agora não tá dando certo ...
Amigo, mas oq em si não está dando mais certo!
Favor descreva dinovo seu problema e vamos por partes!
acho que estamos tendo um pequeno problema de comunicação!
Me descreva seu problema que vamos conseguir solucionar juntos
abraços
Lacrimal, eu, no seu lugar, já teria baixado o cake de novo e tentado bloquear a rota /admin só para ter certeza que o problema não é o código que você está escrevendo.
>
Lacrimal, eu, no seu lugar, já teria baixado o cake de novo e tentado bloquear a rota /admin só para ter certeza que o problema não é o código que você está escrevendo.
Realmente... a versão que eu tinha devia ter algum problema.
Baixei outro e deu tudo certo !
Obrigado pela ajuda :)
Eu testei esse código e funcionou. Ficou assim:
class AppController extends Controller {
// if(Configure::read('Routing.prefixes')){ // $this->Auth->deny('*'); // }else{ // $this->Auth->allow('*'); // } }}
class UsersController extends AppController {
/* no core.php, habilitei a linha 88 * Enables: *admin_index()and/admin/controller/index*manager_index()and/manager/controller/index* * [Note Routing.admin is deprecated in 1.3. Use Routing.prefixes instead] */ linha 88 Configure::write('Routing.prefixes', array('admin'));Com esse código, localhost/master/admin/users/index me direcionava para localhost/master/admin/users/login, pois tudo era
negado ($this->Auth->deny('*')). E localhost/master/users/index carregava tranquilo.
Depois troquei deny('') por allow('') e localhost/master/admin/users/index carregava sem problemas.