Redireccionar usuario logueado con auth y acl en cakephp

586 views
Skip to first unread message

Cuervo

unread,
Nov 5, 2009, 9:40:16 PM11/5/09
to CakePHP en Español
He seguido el cakebook, y en él, el ejemplo de implementación de acl y
auth (Simple Acl controlled Application). He logrado hacerlo muy bien,
pero necesito redireccionar a los diferentes usuarios a diferentes
pages. El ejemplo solo muestra redireccionamiento a: $this->Auth-
>loginRedirect = array('controller' => 'posts', 'action' => 'add');
pero lo que hace esto es que todos los usuarios logueados siempre van
al mismo lugar. Necesito redireccionar a los usuarios a una pagina
diferente dependiendo del group al cual pertenesca el usuario
logueado. En la tabla groups tengo dos usuarios administrators y
users. De antemano gracias.

Pedro Arana

unread,
Nov 7, 2009, 11:23:49 AM11/7/09
to cakep...@googlegroups.com
2009/11/5 Cuervo <cuerv...@gmail.com>:

Basicamente en vez de redirigir a una pagina en concreto , envialo a
un action que verifique los permisos y te redirija a la pagina
correspondiente

$this->Auth->loginRedirect = array('controller' => 'users', 'action'
=> 'redirect');

users_controller.php
...
function redirect(){

switch($this->Auth->user('group')){
case 1: $this->redirect(array('controller' => 'posts', 'action'
=> 'add')); breark; return;
case 2: $this->redirect(array('controller' => 'posts', 'action'
=> 'add')); breark; return;
}
}
...

Saludos
Pedro Arana


--
Defiende tu derecho a pensar, porque incluso pensar de manera errónea
es mejor que no pensar.
-Hipatia de Alejandría

Andres Mauricio Cuervo Rojas

unread,
Nov 7, 2009, 12:48:10 PM11/7/09
to cakep...@googlegroups.com
Gracias Pedro era exactamente lo que estaba buscando. Encontre la solución hace unos pocos minutos.
La explicación la encontre en este link:
 
Esta es la explicación en Español:
 
1.) En el archivo app_controller (En mi caso en el metodo beforeFilter())

$this->Auth->loginRedirect = '/users/loginRedirect';
//autoRedirect es necesariao solo se quiere denegar la redireccion automática, en mi caso no lo fue
//$this->Auth->autoRedirect = false;

2.) En el archivo users_controller
        
        function login()
        {
                if ($this->Auth->login())
                 {
                        $this->loginRedirect();
                 }
        }

        function logout()
        {
                $this->Session->setFlash(::Ha salido de la aplicacion con exito::');
                $this->Auth->logout();
        }

        //Lo que hace este metodo es redireccionar al usuario dependiendo del grupo al que pertenesca
        function loginRedirect()
        {
                $userinfo = $this->Auth->user();
                switch($userinfo['User']['group_id'])
                {
                        case '1': $this->redirect(array ( 'controller' => 'members', 'action' => 'index'), null, true);
                        break;
                        
                        case '2': $this->redirect(array ( 'controller' => 'members', 'action' => 'otherList'), null, true);
                        break;

                        default: $this->redirect(array ( 'controller' => 'members', 'action' => 'index'), null, true);
               }
        }
Reply all
Reply to author
Forward
0 new messages