LACRIMAL 2 Denunciar post Postado Fevereiro 20, 2011 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
vieira.rrafael 2 Denunciar post Postado Fevereiro 20, 2011 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
LACRIMAL 2 Denunciar post Postado Fevereiro 20, 2011 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
Eduiagami 1 Denunciar post Postado Fevereiro 21, 2011 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
LACRIMAL 2 Denunciar post Postado Fevereiro 23, 2011 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
Eduiagami 1 Denunciar post Postado Fevereiro 24, 2011 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
vieira.rrafael 2 Denunciar post Postado Fevereiro 24, 2011 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 2 Denunciar post Postado Março 11, 2011 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