Permisos de usuarios (AppControllerFilters.php)

16 views
Skip to first unread message

Daniel Perez

unread,
Jul 21, 2011, 3:40:03 PM7/21/11
to Yupp Framework PHP
Hola Pablo

Estoy ahora con los permisos de usuario, tengo claro como controlar el
acceso a los controladores y acciones a usuarios, pero no tengo muy
claro como hacerlo en función del tipo de usuario.

En el fichero AppControllerFilters.php, function apply, un comentario
indica:
// Aquí se puede verificar el tipo de permisos que tiene el usuario,
y según el controller y acción,
// se lo puede dejar pasar o no.

Como puedo realizar esto? tengo un campo en Users, que es Usertype,
que determina si el usuario es administrador (-1), usuario normal (0)
o proveedor (1)

Muchas gracias por todo

Saludos

pabl...@gmail.com

unread,
Jul 22, 2011, 11:45:53 AM7/22/11
to Yupp Framework PHP
Hola Daniel,

La forma de verificar permisos depende de cómo representas los
permisos en tu modelo persistente.
Una forma podría ser como propones: agregar un campo en el usuario que
diga qué tipo de usuario es, y si ese usuario tiene permiso para
ejecutar la acción del controller, retornar true, y si no tiene
permiso, redirigirlo a una acción por defecto donde se le indique que
no puede ejecutar esa acción.

Saludos,
Pablo.

Daniel Perez

unread,
Aug 3, 2011, 6:01:01 PM8/3/11
to Yupp Framework PHP
Ok Gracias Pablo,

Mi duda es si puedo hacerlo en el fichero AppControllerFilters.php o
tengo que hacer algo como esto acción por acción en el controlador:

if ($userlogued->getUsertype() == 0) return $this-
>redirect( array("action" => "list") );

Gracias de nuevo

Pablo Pazos

unread,
Aug 3, 2011, 8:47:04 PM8/3/11
to yuppfram...@googlegroups.com
Hola Daniel,

Los filters se definen por aplicación, y en el archivo de filters se indica a qué acciones de qué controladores aplica dicho filtro. Lo que debes hacer es, primero, decir a qué acciones de qué controladores aplica, y segundo, verificar las reglas de seguridad en un solo lugar (el propio filtro) para esas acciones. El framework permite definir más de un filtro para tu aplicación, y para cada filtro debes decir a qué acciones aplica, por ejemplo si pones *, aplica a todas las acciones.

Toda la lógica de verificación debe estar en los filtros, así las acciones de los controladores no contienen código de verificación de seguridad, y son más pequeñas y legibles. La otra ventaja es que se reutilizan las reglas, y no es necesario implementarlas en cada acción.

Saludos,
Pablo.

2011/8/3 Daniel Perez <dap...@terra.es>
--
Has recibido este mensaje porque estás suscrito al grupo "Yupp Framework PHP" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a yuppfram...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a yuppframeworkp...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/yuppframeworkphp?hl=es.




--
Atte.
Ing. Pablo Pazos Gutiérrez
LinkedIn: http://uy.linkedin.com/in/pablopazosgutierrez
Blog: http://informatica-medica.blogspot.com/
Sígueme en twitter: http://twitter.com/ppazos

Daniel Perez

unread,
Aug 4, 2011, 2:43:22 PM8/4/11
to Yupp Framework PHP
Hola Pablo

Entendido perfectamente,

Un ejemplo para un usuario administrador

class AdminFilter extends YuppController implements
IControllerBeforeFilter {
private $controllerActions = array( "company" => "*", "area" =>
"*", "user" => "*", "config" => "*" );
private $exceptControllerActions = array( "user" => array("login",
"logout", "sendPassword") );
public function getAllFilters()
{
return $this->controllerActions;
}
public function getAllExceptions()
{
return $this->exceptControllerActions;
}
public function apply($app, $controller, $action)
{
$userlogued = YuppSession::get("user");
if ($userlogued->getUsertype() <> -1)
{
$this->flash['message'] = "No tiene permisos suficientes para
realizar la acción";
return $this->redirect( array("controller" => "user",
"action" => "login") );
}
return true;
}
}

Gracias

pabl...@gmail.com

unread,
Aug 4, 2011, 7:33:05 PM8/4/11
to Yupp Framework PHP
Gracias por el ejemplo Daniel!

Para los demás, lo que está haciendo Daniel es:

- Crear un filtro que aplica a todas las acciones de sus
controladores: company, area, user y config.
- Este filtro se aplica a todas las acciones, excepto a login, logout
y sendPassword, del controlador user.
- En la verificación, se fija si hay un usuario en sesión, y si lo
hay, verifica si tiene el tipo que lo habilita a realizar la acción.

Lo único que falta es resolver el caso en el que el usuario no está en
sesión, donde si la acción es privada, no se lo debería dejar pasar, o
sea que el filtro lo debería redirigir a una acción permitida para el
usuario que no está logueado, por ejemplo "login".


Saludos,
Pablo.
Reply all
Reply to author
Forward
0 new messages