Access - Seguridad y Grupos de Usuarios en Access 2016

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 9 puestos en Access (en relación al último mes)
Gráfica de Access

Seguridad y Grupos de Usuarios en Access 2016

Publicado por Arturo Eduardo (8 intervenciones) el 21/07/2018 01:56:03
Saludos mis amigos.

Espero contar con su sabiduría para aclarar unas dudas.

Estoy construyendo una base de datos tipo agenda en access 2016 con seguridad por usuarios y grupos de usuario. Con las siguientes Tablas y Formularios:

TD_Usuario_Activo (Usuario)
TD_Usuarios (ID, Nombre, Contraseña)
TD_Grupos_Usuarios (ID, Nombre, Grupo_Superior,Observaciones)
TD_Formularios (ID, Nombre, Propietario, Observaciones)
TD_Permisos_Usuario (ID, Usuario, Formulario, Lectura, Agregar, Modificar, Eliminar [Si/No])
TD_Permisos_Grupo (ID, Grupo, Formulario, Lectura, Agregar, Modificar, Eliminar [Si/No])

TD_Ventas
TD_Articulos
TD_Stock
TD_Inventarios
TD_Cotizaciones

FRM_Acceso
FRM_Usuarios
FRM_Grupos
FRM_Permisos_Usuario
FRM_Permisos_Grupo

FRM_Articulos
FRM_Stock
FRM_Ventas
FRM_Inventarios
FRM_Cotizaciones

Hasta el momento, al abrir la base de datos:
* Se inicia con el FRM_Acceso, el cual solicita nombre de usuario y contraseña.
* Valida su permiso de acceso en TD_Usuarios y Registra el Usuario Activo en TD_Usuario_Activo,
* Al intentar acceder a cada formulario, se consulta el Usuario Activo y se validan sus permisos de acceso al formulario.

La proyecto es:

Crear una base de datos principal (Back-end) y diversas bases de datos con tablas vinculadas (front-end), en donde cada usuario pueda pertenecer a uno o varios grupos, y a su vez los grupos puedan pertenecer a otros grupos superiores, con sus respectivos permisos de usuario, permiso de grupo y permisos heredados, donde un mismo usuario pueda acceder a las diversas Front-End con sus respectivos accesos y permisos.

Existen actualmente 4 grupos de usuarios y sus permisos:

*** Sistemas
-FRM_Usuarios (Lectura +, Agregar +, Modificar +, Eliminar+)
-FRM_Grupos (Lectura +, Agregar +, Modificar +, Eliminar +)
-FRM_Permisos_Usuario (Lectura +, Agregar +, Modificar +, Eliminar +)
-FRM_Permisos_Grupo (Lectura +, Agregar +, Modificar +, Eliminar +)

*** Administración
-FRM_Ventas (Lectura +, Agregar +, Modificar +, Eliminar +)
-FRM_Cotizaciones (Lectura +, Agregar +, Modificar +, Eliminar +)
-FRM_Artículos (Lectura +, Agregar +, Modificar +, Eliminar +)
-FRM_Stock (Lectura +, Agregar +, Modificar +, Eliminar +)
-FRM_Inventarios (Lectura +, Agregar +, Modificar +, Eliminar +)

*** Vendedores (Administración)
-FRM_Artículos (Lectura -, Agregar -, Modificar -, Eliminar -)
-FRM_Stock (Lectura -, Agregar -, Modificar -, Eliminar -)
-FRM_Cotizaciones (Lectura +, Agregar +, Modificar +, Eliminar -)
-FRM_Ventas (Lectura +, Agregar +, Modificar -, Eliminar -)
-FRM_inventarios (Lectura +, Agregar -, Modificar -, Eliminar -)

*** Almacenistas (Administración)
-FRM_Cotizaciones (Lectura -, Agregar -, Modificar -, Eliminar -)
-FRM_Ventas (Lectura -, Agregar -, Modificar -, Eliminar -)
-FRM_Artículos (Lectura +, Agregar -, Modificar -, Eliminar -)
-FRM_Stock (Lectura +, Agregar -, Modificar -, Eliminar -)
-FRM_Inventarios (Lectura +, Agregar +, Modificar +, Eliminar +)

*** Auditoria (Administración)
-FRM_Cotizaciones (Lectura +, Agregar -, Modificar -, Eliminar -)
-FRM_Ventas (Lectura +, Agregar -, Modificar -, Eliminar -)
-FRM_Artículos (Lectura +, Agregar -, Modificar -, Eliminar -)
-FRM_Stock (Lectura +, Agregar -, Modificar -, Eliminar -)
-FRM_Inventarios (Lectura +, Agregar -, Modificar -, Eliminar +)


Existen 6 Usuarios
*** Administrador_Sistema (Sistemas)

*** Gerente (Administración)
-FRM_Ventas (Lectura +, Agregar -, Modificar +, Eliminar +)
-FRM_Cotizaciones (Lectura +, Agregar -, Modificar +, Eliminar +)
-FRM_Stock (Lectura +, Agregar +, Modificar +, Eliminar +)


*** Contador (Administración)
-FRM_Ventas (Lectura +, Agregar -, Modificar -, Eliminar -)
-FRM_Cotizaciones (Lectura +, Agregar -, Modificar -, Eliminar -)
-FRM_Stock (Lectura +, Agregar +, Modificar +, Eliminar +)
-FRM_Inventarios (Lectura -, Agregar -, Modificar -, Eliminar -)

*** Vendedor (Ventas)

*** Almacenista (Almacén)

*** Auditor (Auditoria)

Mis dudas son:

1.- Para abrir cada formulario debo consultar todos los permisos del usuario activo, permisos de su grupo y sus
permisos heredados ,¿Como hago eso?...

2.- Supongo que podría crear una Tabla "TD_Permisos_Usuario_Activo" para que, al acceder al formulario FRM_Acceso, validar el usuario, registra el nombre de usuario en TD_Usuario_Activo y sus respectivos permisos en "TD_Permisos_Usuario_Activo", para cuando intente acceder a cada formulario, consulte sus permisos en dicha tabla y permita el acceso o no. ¿Es correcto?

3.- Creo entender se deben realizar algún procedimiento recursivo para realizar la consulta de los derechos del usuario en TD_Permisos_Usuario y cargarlo en TD_Permisos_Usuario_Activo, después realizar la consulta de los derechos de su grupo en TD_Permisos_Grupo, y unificar lo permisos en TD_Permisos_Usuario_Activo, (dando preferencia a los permisos negados (-) mas que a los autorizados (+)), después que hacer una consulta del grupo padre, actualizar TD_Permisos_Usuario_Activo, y así hasta que el grupo padre sea "null"... o algo asi... y aqui es donde mis experiencia no me favorece en el tema de consultas.,

4.- Realmente no pido me solucionen el problema, sino que me orienten para poder encontrar la solución, algun link para la sintaxis de dicho procedimiento recursivo.

Agradezco de antemano sus aportaciones para reducir mi ignorancia,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Seguridad y Grupos de Usuarios en Access 2016

Publicado por Anonimo (3316 intervenciones) el 21/07/2018 09:35:26
Normalmente los usuarios 'interactúan' con los datos mediante formularios …..

¿Cuántos formularios o medios para interactuar con los datos tienes?

Una tabla que cruce a los usuarios con los medios (en el cruce un valor que indique sus permisos (por ejemplo 0, 1, 2) seria el método mas eficaz para llevar el control, el resto … bueno, una simple lista de usuarios y otra de 'combinaciones de permisos' permitirían al gestor la aplicación rápida de permisos standard que posteriormente pueden ser personalizados.

Utilizando la tabla de cruzamiento, un simple DLookup (se conoce al usuario activo, se 'conoce' al objeto a controlar) devuelve los permisos de ese usuario para ese objeto en tiempo de ejecución (si recursividad ni otros misterios por descubrir).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 9 puestos en Access (en relación al último mes)
Gráfica de Access

Seguridad y Grupos de Usuarios en Access 2016

Publicado por Arturo Eduardo (8 intervenciones) el 21/07/2018 15:52:52
La idea es que al abrir cada formulario, un procedimiento investigue si el usuario activo tiene acceso y que tipo de acceso tiene (Lectura, Agregar, Modificar, Eliminar), buscando sus derechos en los derechos de cada uno de los grupos a los que pertenece dicho usuario..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Seguridad y Grupos de Usuarios en Access 2016

Publicado por Anonimo (3316 intervenciones) el 21/07/2018 19:27:47
Y que impide que (al abrir el formulario o al llamarlo) se lance el DLookup y se obtenga el nivel de 'ese usuario' sobre 'ese formulario' …..

Se puede complicar tanto como se desee hacer esperar al usuario a acceder a trabajar pero no veo que inconveniente se ve en que 'esos permisos específicos' se generen al dar de alta al usuario en el sistema y se guarden para usos posteriores en lugar de un recalculo cada vez que se precisen consultar..

En fin, aun con 500 usuarios y con 500 formularios se puede lograr un tiempo mínimo (incluso despreciable utilizado el método adecuado: SEEK) y no darle vueltas cada vez que se desee obtener un valor que (como al final es el mismo) puede estar previamente calculado.

Pero cada cual conoce sus recursos y tiene que ser creativo con ellos.... teniendo claro lo que se desea y como se desea la pregunta 'lógica' seria consultar la solución a un problema especifico y concreto, esto:
..
Realmente no pido me solucionen el problema, sino que me orienten para poder encontrar la solución, algun link para la sintaxis de dicho procedimiento recursivo.
….

No me parece (aunque puedo estar equivocado) una pregunta concreta ante un problema determinado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 9 puestos en Access (en relación al último mes)
Gráfica de Access

Seguridad y Grupos de Usuarios en Access 2016

Publicado por Arturo Eduardo (8 intervenciones) el 21/07/2018 21:32:19
Ok... quizás estoy mal encaminado y como dirian en mi tierra "orinando fuera del hoyo"...

Expongo los siguientes principios dentro del proyecto:

Cada usuario puede pertenecer a varios grupos, los cuales están registrados en (TD_Integreantes_Grupo)
Cada grupo puede pertenecer a otro un grupo (TD_Grupos_ Usuarios)
Los permisos de acceso de cada usuario están registrados en una tabla (TD_PU_Forms)
Los permisos de acceso de cada grupo están registrados en una tabla (TD_PG_Forms)

El usuario actual que accede al proyecto se registra en una tabla (TD_Usuario_Activo)
Los permisos del usuario actual se registran en una tabla (TD_Permisos_Usuario_Activo)

La idea es que al abrir el proyecto, un procedimiento busque los permisos de grupo (TD_PG_Forms) y los permisos individuales (TD_PU_Forms) y los almacene en una tabla (TD_Permisos_Usuario_Activo) y para después, al abrir cualquier formulario consultar sus permisos y permitirle el acceso o negarlo según sea el caso.

Hasta aquí, unos Dlookup y DoCmd.RunSQL son mas que suficientes para obtener los datos de un campo dentro de la base de datos y actualizar "TD_Permiso_Usuario_Activo":

Situación 1:

Estructura de TD_Grupos (Nombre, Grupo_Padre, Descripción)

Lo que me permite tener una estructura de grupos similar a esto

-Sistemas
-Gestores
-Administracion
-Almacen
-Auditoria
-Ventas
-Vendedores A
-Vendedores B

La idea que se me ocurre del procedimiento recursivo es

Buscar_Permisos_Grupo ("Grupo_Buscado")
Inicio de Procedimiento

'Leer permisos de Grupo_Buscado en TD_PG_Forms

'Guardar Permisos de Grupo_Buscado en TD_Permisos_Usuario_Activo

'Buscar grupo_superior Dlookup(Grupo_padre;TD_Grupos;"Grupo = "´" & Grupo_Buscado &"")

'Si existe grupo_superior entonces

'Buscar_Permisos_Grupo (Grupo_Superior) (llamada recursiva)

Fin de Procedimiento


Problemas

No se que procedimientos o funciones pudiera usar para leer registros completos en TD_PG_Form y guardarlos en TD_Permisos_Usuario_Activo, recordando que son varios registros los que corresponden a cada grupo y usuario.


¿Alguna sugerencia?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 9 puestos en Access (en relación al último mes)
Gráfica de Access

Seguridad y Grupos de Usuarios en Access 2016

Publicado por Arturo Eduardo (8 intervenciones) el 22/07/2018 17:44:29
Actualización de situación.

Se me ocurrió algo, al iniciar la aplicación, realizar dos consultas de anexión de datos, una que obtenga los permisos del usuario y otra que obtenga los permisos de los grupos a los que pertenece el usuario (TD_Permisos_Usuario y TD_Permisos Grupo respectivamente) y los resultados los anexe a la tabla TD_Permisos_Usuario_Activo, pero me surge la siguiente duda.

Cuando un usuario pertenece a dos o mas grupos, y dichos grupos tienen permisos de acceso diferentes al mismo formulario, ¿Como unificar esos permisos)... ejemplo

Grupo A
Formulario1 (Leer -, Agregar +, Modificar -, Eliminar -)
Formulario2 (Leer +, Agregar -, Modificar -, Eliminar -)

Grupo B
Formulario1 (Leer + , Agregar -, Modificar -, Eliminar -)
Formulario2 (Leer - , Agregar +, Modificar -, Eliminar -)

El Usuario que Pertenece a Grupo A y Grupo B, al realizar la consulta de anexión de datos quedaría asi
(4 Registros)

Formulario1 (Leer -, Agregar +, Modificar -, Eliminar -)
Formulario2 (Leer +, Agregar -, Modificar -, Eliminar -)
Formulario1 (Leer + , Agregar -, Modificar -, Eliminar -)
Formulario2 (Leer - , Agregar +, Modificar -, Eliminar -)

Que podría hacer para que quedara así
(2 Registros)

Formulario1 (Leer +, Agregar +, Modificar - Eliminar -)
Formulario2 (Leer +, Agregar +, Modificar - Eliminar -)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar