Claves de acceso

Tengo un pequeño sistema con un menu idéntico para todos los usuarios, el punto es que quiero restringir la entrada de algunos a ciertas opciones del menu, y no se me ocurre cual sera un buen camino.
Tengo una tabla con el RUT del usuario y la clave correspondiente.

1 Respuesta

Respuesta
1
Este problema ya me lo han planteado alguna vez.
Así que me voy a permitir (con tu consentimiento por supuesto), integrarte la respuesta que en su momento envíe a un colega y que esta muy cerca de lo que tu necesitas. Creo que con esto te puedes hacer una idea de una de tantas formas que pueden dar solución a este inconveniente.
Existen 2 formas de poder limitar a los usuarios de un sistema:
La primera y la más simple, es dejar que la propia base de datos impida o permita, el manejo de información, a los usuarios que ingresan al sistema, claro esto dependiendo del rol que juegan en dicha base de datos, (claro, siempre y cuando la base de datos te lo permita, me refiero a la creación de usuarios, grupos, administradores, etc), esto a lo mejor no es necesariamente limpio en presentación, visualmente hablando, puesto que todos los usuarios pueden ver y seleccionar todas las opciones, aunque no todos pueden actuar sobre toda la data.
La otra cara:
Esta es la más difícil pero al final la más satisfactoria, aunque tienes que tener un poco de cuidado con ella, esta opción es la que el programador o desarrollador como tal deberá construir (personalmente esta es la que más me gusta), puesto que deberá conformar un sistema de seguridad para la integridad de los datos y de la propia aplicación, o aplicaciones, este sistema de seguridad deberá tener la posibilidad de aperturar usuarios, controlar claves, manipular permisos, revocar usuarios, etc.
Una idea:
En principio puedes utilizar un único usuario el cual tenga permisos de todo en la base de datos, este usuario es totalmente invisible al usuario de la aplicación, por medio de este, harás la conexión a la base de datos, claro cuidado con revelar la identidad de dicho usuario, la conexión será efectuada en el momento de la apertura del programa, incluso antes de presentar la pantalla que solicita el nombre del usuario o login y su clave,
Una vez que el usuario ingresa los datos, verificas su rol en una tabla, la cual permitirá el ingreso del usuario, adicionalmente otras tablas que permitirán la visualización, de opciones en el menu, opciones de mantenimientos, etc.
Este sistema de seguridad deberá permitir crear grupos de trabajo, y a estos adicional usuarios. De tal manera que sea más simple crear un grupo, indicar sus privilegios y adicional al grupo todos los usuarios que queramos, siendo más simple que colocar dichos privilegios a cada usuario.
(Pero eso ya es según criterio)
La estructura
Opcionalmente podría ser más o menos así
Tabla de usuarios:
Código del usuario
Nombre del usuario
Login de ingreso
Clave de acceso
Status del registro
Tabla de grupos:
Código del grupo
Descripción del grupo
Status del grupo
Tabla de menu y relación grupos
Codigo de menu
Descripcion del menu
Status del menu
Codigo del grupo
Tabla de detalle del menu
Codigo del menu
Descripcion de opcion
Opción
Tipo de opción
Puede altas
Puede bajas
Puede cambios
Status de opcion
Tabla de relación grupo-usuario
Código de grupo
Código de usuario
Status del grupo
Como ya habrás deducido a esta altura, estas tablas manejan directamente el acceso de un usuario, sin que este sea dado de alta en la base de datos como tal, y ademas se integre un rol o permisos de acceso, actualización, visualización, etc.
En las tablas relacionadas con menu, integraras las opciones de todo el menu de tu aplicación, teniendo en cuenta que estas puedan ser encendidas o apagadas, adicionalmente la relacionas con un grupo de trabajo, el cual asu vez esta relacionando un grupo de usuarios, los cuales poseerán todos los atributos que designes de la tabla de detalle del menu u opciones de menu,
Estas opciones serán las que describirás en el menu general de la aplicación (por supuesto una aplicación MDI), en la tabla de opciones encontraras un campo OPCIÓN, la cual personalmente coloco el nombre del objeto del menu, así no importa si cambia la descripción de la opción, no cambia los atributos del menu.
Todo esto en conjunto, haciendo invisible el usuario primario o único, permite controlar la aplicación bastante bastante bien, ademas que solo utilizas un único usuario en la base de datos.
Antes de finalizar la pregunta.
Me quieres decir que para mi caso, como cada usuario tiene diferentes opciones, ¿yo debo crear un grupo con solo un usuario cada uno?
Si es así me parece muy buena tu ayuda, ya que me permitiría crecer mucho a futuro.
Te felicito por tu dedicación.
Muchas Gracias.
Bueno, con tu aporte, voy a lograr hacer un buen sistema de seguridad, muchas gracias y te felicito por tu dedicación.
Algo estoy entendiendo, y mis primeras dudas son :
¿Para qué sirven los campos status de cada tabla?
Un campo de status siempre te viene bien para poder cambiar el estado del registro.
Por ejemplo en la tabla de del detalle del menu. Este campo podría ser ABIERTO o CERRADO, declarando así el tipo de acceso hacia un grupo de usuarios, de esta forma podrías dar o quitar el permiso correspondiente.
En mi caso yo utilizo en todas mis tablas el campo de status, el cual generalmente es ACTIVO o CERRADO. Permitiéndome así reconocer un registro que permite o no hacer un proceso, o verlo o imprimirlo. Etc.
Un ejemplo simple es una factura.
Personalmente no borro mis facturas sino que les cambio un status, ACTIVO o ANULADO. Esto me indica si la factura debe ser contabilizada o no.
Todo super bien, pero acá en esta empresa, no hay grupos definidos y todos pueden hacer de todo, por lo tanto, ¿me podrías ayudar de como lo debo hacer si solo tengo usuarios individuales y un solo menu general?
POr ejemplo :
Usuario 1
Usuario 2
Usuario 3
Usuario 4
menu principal
Opción 1
Opción 2
Opción 3
Opción 4
Opción 5
El usuario 1 acceso a todo
el 2 solo opciones 2 y 3
el 3 solo opcions 2 3 y 4
el 4 solo 3 4 y 5
Gracias, pero soy nuevo en esto y creo que con algo de esa simpleza bastaría para nosotros.
Con la solución que propongo.
Realmente lo que estoy creando es un ambiente de permisos.
La filosofía de este ambiente va en función de grupos, o sea defines un grupo y a ese grupo le defines el acceso a las opciones del menu.
Luego añades usuarios a ese grupo, por tanto los usuarios que pertenezcan a ese grupo, todos tienen las mismas opciones.
Un grupo puede estar formado de por lo menos 1 usuario, y todos los demás que quieras.
Tienes que tener cuidado de impedir que un usuario pertenezca a varios grupos, pues entonces no podrás descubrir sus privilegios.
Cuando inicias tu aplicación, simplemente lees la tabla que contiene los usuarios-grupo, por medio del usuario, este te indica el grupo, y con el grupo el detalle de las opciones que tiene disponibles,
Ahora lo único que tienes que hacer es colocar la propiedad de VISIBLE en FALSE
A todas las opciones del menu de tu aplicación, y por ultimo colocar la propiedad VISIBLE en TRUE, a todas las opciones que corresponden al grupo, en donde se encuentra el usuario que esta ingresando a la aplicación.
Pareciera entonces que tu aplicación no es una, sino que son muchas, pues cada usuario solo podrá ver las opciones del menu que tu decidas, y no todos tendrán el mismo menu.
El concepto es muy simple, lo complicado ahora es la programación.
Claro esto es una simple idea, basada en que ya tienes una tabla que registra a sus usuarios.
Y puedes echarle toda la imaginación adicional que se te ocurra.
Como por ejemplo añadir una auditoria de accesos, mensajería, etc.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas