Ver Mensaje Individual
  #4  
Antiguo 13-06-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo esto lo he estructurado así:

Tengo tres tablas:

usuario = (id, usuario, contraseña)
proceso = (id, descripción)
permiso = (id, usuario_id, proceso_id)

Cada proceso corresponde a un punto del sistema al que se puede acceder o no, de manera que cada usuario puede tener permiso a múltiples procesos y múltiples usuarios pueden tener permiso a un proceso, es decir, una relación n - n, que queda plasmada en la tabla permiso.

El administrador tiene permiso a todos los procesos, que incluye el proceso para asignar permisos a otros usuarios.

El resto es como lo plantea BlueSteel. Cada módulo se accede mediante una opción de menú y en principio todos los menúes están inhabilitados con excepción de:

Código:
Archivo         
  Iniciar sesión
  --------------
  Salir
Al iniciar sesión, una vez validado el usuario, se lee la tabla de permisos filtrándola por el ID del usuario y se habilitan aquellos menús/submenús para los cuales se cuente con permiso.

Yo hago esto menú por menú, pero en realidad podría automatizarse asignando a cada TMenuItem.Tag el ID del proceso que corresponda y buscando, en un ciclo, dicho ID en la tabla de permisos.

No manejo propiamente perfiles aunque sí categorías de permisos, implementadas de forma rudimentaria:

Cada grupo de procesos, por ejemplo, Clientes, tiene asignado un ID centenario, digamos, 500. Los subprocesos tales como Alta de clientes, Modificación de Clientes, tienen IDs 501, 502, etc.

En el menú principal, hay un menú Clientes que tiene como submenús a Altas y Modificación.

Al leer los permisos, si el usuario no tiene el permiso 500, entonces omito todos los subpermisos. Si sí tiene el permiso 500, debo leer uno por uno los subpermisos para ver cuál submenú habilito y cuál no.

// Saludos

Última edición por roman fecha: 13-06-2008 a las 03:07:09.
Responder Con Cita