prinick96 / Ocrend-Framework

Ocrend Framework Repositorio Oficial, Comunidad en https://foro.ocrend.com
https://framework.ocrend.com
MIT License
44 stars 28 forks source link

Control de permisos individuales #3

Closed marcgdl closed 8 years ago

marcgdl commented 8 years ago

Hola

Estoy agregando un control de usuarios para proteger cada acción (Ejemp; Usuarios: ver, crear, editar, eliminar).

En este momento almaceno mediante un JSON los accesos que se le otorguen al usuario, hasta este momento puedo editar, los permisos y cargarlos al iniciar sesión como un array dentro de las variables de sesión.

Mi pregunta es ¿ Donde sería lo correcto implementar este control ?.

He pensado en crear una función (Func.php), y llamarla en cada controlador por cada vista o acción que fuera a realizar, alguna opinión al respecto ?

prinick96 commented 8 years ago

Lo más fácil sería, que en la tabla users tengas un campo:

permisos tinyint(1) not null default 0

Y que analices los permisos de la siguiente manera:

0: Usuario normal 1: Usuario con permisos X 2: Usuario con permisos Y

Como quieras, la idea es que identifiques cada rango con un número, entonces en Login.php

# En errors()
# La petición actual de información al iniciar sesión es esta:
$this->u = $this->db->select('id,pass','users',"user='$this->user'",'LIMIT 1');
# Sería cuestión de que en añadas también 'permisos' a lo que traes de la DB
#... select('id,pass,permisos','users ... así.

Luego en el método SignIn, antes del return array()

$_SESSION['permisos'] = $this->u[0][2];

Y cada vez que quieras saber el permiso del usuario (luego de que haya iniciado sesión) pues usas esa variable de sesión que está disponible entonces desde cualquier controller, vista o modelo de toda la aplicación.

Si lo quieres formalizar más, en Controllers.php crea una propiedad protected $permisos por ejemplo, y dentro del constructor:

# De tal forma que cuando no esté definida esa variable de sesión (que es cuando alguien no ha iniciado sesión) por defecto sea 0 por ejemplo.
$this->permisos = $_SESSION['permisos'] ?? 0;

Y lo usas como cualquier otra cosa más. Luego si estás ocupando el registro, en Reg.php deberías crearla también:

$_SESSION['permisos'] = 0; # Siendo este el valor que asignes por defecto a quien se registre

Y ya haces switch's o if's para el control que necesites en determinados puntos de tu programa tomando como referencia el valor que tenga esa variable de sesión para controlar los permisos de los usuarios.

marcgdl commented 8 years ago

Solo para puntualizar, lo que hice fue asignar una abreviatura para cada metodo de cada controlador;

(controlador) Clientes/ver-crear-editar-borrar (1,2,3,4).

En una vista cree un formulario con un checkbox para cada controlador y almacene todo como un json para guardarlo en la tabla users, de esta manera puedo asignar permisos individuales a cada usuario.