Sistema de autenticación simple en CakePHP


CakePHP es un framework de PHP que tiene soporte para un sistema de permisos muy complejo en base a ACL. Sin embargo no todos los desarrollos web requieren de algo tan complejo. Para esos casos, con sólo usar el AuthComponent se puede manejar de manera sencilla. Esta es la manera en que lo he hecho yo:

Este método asume que cada usuario pertenece a un sólo grupo y pueden haber tantos grupos como se anecesario. Para lograrlo es necesario modificar el AppController para hacer que cargue el AuthComponent y un archivo en el que indicaremos los permisos.

Archivo de definición de permisos (permissions.php)







En este archivo, que debemos colocar en el directorio config de nuestra aplicación, definimos dos cosas:

  1. Los grupos permitidos en el sistema (en este caso User y Admin), el orden en que se definen los grupos es importante y determina una cascada de permisos (es decir, que como User tiene menor índice que Admin entonces Admin puede hacer todo lo que está permitido a los usuarios)

  2. Por cada controlador, las acciones y el grupo que puede ejecutar dicha acción.

Con este archivo ya definimos los permisos y si se agrega un nuevo controlador o una nueva acción será necesario incluirla en este archivo.

Carga de la definición de los permiso y filtrado


En el AppController se realiza todo el manejo de los permisos, de modo que los demás controladores queden libres de manejar esta lógica:

Como se puede observar, lo primero que hace es cargar el archivo de permisos que creamos en la parte anterior. De modo que en la función beforeFilter (que CakePHP ejecuta automáticamente antes que cualquier otra parte del controlador) pueda ser instanciada la clase.

La función _initializeAuth configura algunas características del AuthComponent, entre ellas establece el método de autenticación en “controller” (para manejar los permisos por medio de la función isAuthorized del controlador). Es importante notar que esta función realiza parte del filtrado de permisos, debido a que en caso de que el usuario no esté autenticado (un visitante) la función isAuthorized no es ejecutada por el Auth Component.

Y por último, en isAuthorized se ejecuta el resto de la verificación de permisos que consiste en preguntar a la clase AppPermissions si el grupo al que pertenece el usuario actual está autorizado para acceder a la acción actual (en el controlador actual).

Como ven, la mayor parte de la acción se ejecuta en el AppController pero es la clase AppPermissions la que realiza la mágia de determinar quién tiene acceso a qué (por medio de la función groupHasAccess).

Entradas que pueden interesarte