Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-01-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Question Diseño de una BD - Usuarios, Perfiles, Permisos

Buenas foristas, si bien mi dilema que detallo a continuación tiene que ver con el apartado de Base de Datos... no es hacia la conexión, sino más bien al diseño.

Veran, estoy desarrollando una aplicación compleja y grande. La misma está planteada para ser llevada a cabo en forma genérica. Pues, puede aplicarse en cualquier area o departamento, organización, gustos y necesidades. El problema surge al momento de elaborar el diseño relacional de las tablas que intervienen en el apartado de seguridad.

Hasta el momento la base de datos está en papel. Pues, recien tengo material suficiente como para empezar su armado.

Como he dicho anteriormente, debe ser diseñada la base de datos para que se amolde a cualquier ambiente organizacional. Para ser preciso tengo las siguientes tablas:

* Usuarios: que lleva un reguistro de usuarios, obviamente.
* Perfil: que mantiene los distintos perfiles que sean necesarios.
* Roles: Esta tabla es la intermedia entre los usuarios y roles. Como pueden adivinar, mantiene asociado los perfiles a los usuarios.
* Funcionalidad: es una tabla simple que cuenta con un ID y descripción. Mantiene en su interior las funcionalidades permitidas en el sistema.

¿Porque mantengo esta última tabla? Pues, para permitir administrar los permisos a cada usuario a las mismas. Por tanto, pondría una tabla intermedia entre perfil y Funcionalidad. Llamemosla por ahora Permisos.

¡Hasta allí bárbaro! Ahora se pone lindo. He dicho que el sistema debe sobrevirir en cualquier organización. ¿Ahora... que distingue a cada organización? Sus propias "Reglas de Negocio". Por tanto, es en este punto donde todo lo planteado para ser general se lleva hacia la especialidad.
¿Que tiene que ver con todo lo anterior?¿Con usuarios... y perfiles?

Pues, muy sencillo... las mismas reglas de negocio dictan sobre los permisos. La parte interviniente es la administración de dichos permisos. Por poner un ejemplo: Una organización impone como regla general que un usuario X pueda acceder a toda función excepto a la Y. Pero tanto este como otro usuario responden a un perfil P. Restringir esta funcion al perfil viola entonces el modelo relacional.
¿Se entiende?
A lo que voy es que a pesar de que existan perfiles, y funciones. Cada usuario que tenga dicho perfil puede o no estar asignado a dicha función. Por poner un ejemplo: Existen varios administradores, pero algunos con más o menos privilegios que otros. Claro... todo depende de las reglas de negocio.

Entonces... en base a esto, estaba pensando en incorporar otra tabla llamada Regla. Y... viendo las relaciones, me doy con que se conecta con Perfil y Funcionalidad... y ¡ya existe tal relación: Permisos! Se forma otro arco. Y visto desde el punto de normalización esto es algo inaceptable.

yo me estaba imaginando a la tabla Regla con campos ID que se asocien perfiles y funciones (clave foranea) y un campo condicion...

Puede o no existir permisos, pero siempre hay reglas que dictan los posibles permisos... y bueno... hasta allí llego:

DILEMA: ¿Como establezco la relacion? ¿Al final... las reglas van unidas a los permisos?... a los usuarios?... adonde...?

Por eso recurro a ustedes para escuchar opciones, recomendaciones (son vàlidas las de tipo "dejate de romper la cabeza")

Disculpen que mande semejante texto...

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 09-01-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Hola Delphius

Por lo que he entendido (si lo he entendido bien), estableces los permisos de usuarios a partir de los perfiles, algo así (perdón si no se entiende bien el gráfico):

Usuarios <- Roles -> Perfiles <- Permisos -> Funcionalidad

El problema es el que tu dices, al no haber una relación directa entre Usuarios y Funcionalidad, no puedes aplicar permisos particulares a un usuario. Esto puede ser un usuario que tenga permisos de que no entran dentro de sus perfiles o un usuario no tenga permisos para algo que está en un perfil que tiene asignado.

Yo haría una de estas dos cosas:

- No romperme la cabeza , y pasar de los perfiles
Usuarios <- Permisos -> Funcionalidad

o
- Machacarme la cabeza, añadir una tabla de excepciones que relacione directamente usuarios y Funcionalidad, donde activarías o desactivarías funcionalidades según el usuario

Usuarios <- Roles -> Perfiles <- Permisos -> Funcionalidad
| |
\<--------- Excepciones------------------->/

(Perdón por el cutre ASCIIArt que me he mandado, espero que se entienda).

Supongo que habrá más opciones, pero estas son las que se me ocurren.
Responder Con Cita
  #3  
Antiguo 09-01-2007
Avatar de Onti
Onti Onti is offline
Miembro
 
Registrado: jul 2003
Ubicación: La Paz - Bolivia
Posts: 500
Poder: 21
Onti Va por buen camino
Cuando estuve en ese punto, desarrolle un modulo de control de acceso basado en el RBAC que es un standar muy utilizado y flexible. ahora ya lo incorpora en todas las aplicaciones que realizo
Responder Con Cita
  #4  
Antiguo 09-01-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por basti
- Machacarme la cabeza, añadir una tabla de excepciones que relacione directamente usuarios y Funcionalidad, donde activarías o desactivarías funcionalidades según el usuario

Usuarios <- Roles -> Perfiles <- Permisos -> Funcionalidad
| |
\<--------- Excepciones------------------->/
Entiendo bien lo que dices, pero a nivel relacional de BD, incluso esa forma es incorrecta. Como ves, hay dos arcos entre Usuarios y Funcionalidad. Si es cierto de que en algunos casos hay que romper algunas reglas de normalizacion, pero creo que debe haber una mejor manera. Todavia la sigo buscando.

Onti, me voy a poner a ver eso: RBAC.

Gracias a ambos por responder y ofrecer su ayuda.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Control de Permisos con ADO Migpal MS SQL Server 4 08-11-2005 08:27:50
Como implementar transformaciones con perfiles de color dim Gráficos 6 21-10-2005 17:53:05
Permisos, roles y usuarios TJose Firebird e Interbase 0 04-04-2005 16:22:19
permisos de red nicocer API de Windows 2 18-06-2004 20:17:46
Backup de Usuarios y permisos en W2000 Server gines Windows 3 31-07-2003 12:40:43


La franja horaria es GMT +2. Ahora son las 17:40:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi