Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LACRIMAL

[Resolvido] admin route com auth

Recommended Posts

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('*');
}
else {
$this->Auth->allow('*'); // permite todas as que não forem admin
}
$this->Auth->userModel = 'Admin';
Security::setHash('md5'); // seta o tipo de encriptação, pode ser sha ou outra também.
//$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 :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.