Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Controlar acceso a Usuarios (https://www.clubdelphi.com/foros/showthread.php?t=57382)

luxus 12-06-2008 23:40:00

Controlar acceso a Usuarios
 
Hola Amigos,

Estoy finalizando una aplicación y tengo que implementar un sistema de acceso a la misma mediante el nombre de usuario y una contraseña. He estado leyendo por el foro pero no he encontrado algo que me pueda ayudar.

En el programa habrá un administrador el cual dará de alta a los demas usuarios y la clave de acceso. Cada administrador tendrá un nivel de permisos con lo que en algunos apartados algunos usuario no tendrán acceso.

Alguna idea de cómo implementarlo? Uso una base de datos en access con lo que me planteo en guardar las contraseñas y nombre de usuarios en otro sitio para que nadie pueda alterar los permisos.

Gracias y un saludo

BlueSteel 12-06-2008 23:53:21

Cita:

Empezado por luxus (Mensaje 293269)
Hola Amigos,

Estoy finalizando una aplicación y tengo que implementar un sistema de acceso a la misma mediante el nombre de usuario y una contraseña. He estado leyendo por el foro pero no he encontrado algo que me pueda ayudar.

En el programa habrá un administrador el cual dará de alta a los demas usuarios y la clave de acceso. Cada administrador tendrá un nivel de permisos con lo que en algunos apartados algunos usuario no tendrán acceso.

Alguna idea de cómo implementarlo? Uso una base de datos en access con lo que me planteo en guardar las contraseñas y nombre de usuarios en otro sitio para que nadie pueda alterar los permisos.

Gracias y un saludo

Creo que igualmente te puedes crear una tabla en Access con los datos de los usuarios... pero en el campo de la contraseña o clave, realizar un proceso para guardar dicho dato encriptado.... puedes encontrar varios modelos o algoritmos de encriptación... o te puedes crear uno propio... tan simple como tomar los caracteres uno por uno, convertirlos a ASCII y sumarles cierta cantidad y almacenarlos como binario o caracter...

con respecto a los permisos de los usuarios, y tenemos los niveles, creo que una buena forma es limitando el acceso al menu principal...

en donde al que tenga menos permiso le desabilitas las opciones de menu, y así sucesivamente..

mira el sgte codigo, lo que realiza es desabilitar el menu de acceso al sistema según el valor que traiga el usuario (Sw2='2' o ='3'... si es ='1' tiene todo el acceso)

Código Delphi [-]
   If (Sw2= '2') Or (Sw2= '3') Then
        Begin
             Menus.Items[1].Items[0].Enabled := False;
             Menus.Items[1].Items[1].Enabled := False;
             Menus.Items[1].Items[2].Enabled := False;
        End;
     If Sw2 = '3'Then
        Begin
             Menus.Items[0].Items[1].Enabled := False;
        End;

espero que esto te sirva...

bueno, de seguro existen otras opciones, pero esa le he utilizado y me ha funcionado super...

Salu2:p:D

Delphius 13-06-2008 02:22:59

Hola luxus,
Lo que te ha dicho el compañero BlueSteel es lo básico a tener en cuenta. Pero deberás tener presente (muy presente) de como deben estructurarse tanto los permisos como los perfiles.
Y esto dependerá de como se trabaje en dicha empresa/negocio como así también del nivel de seguridad que se exige para el sistema.

Por ejemplo, el modo básico dice que para un perfil existe al menos un usuario. Pero un usuario tiene un sólo perfil. Es decir el esquema relacional vendría a ser 1-M desde Perfiles a Usuarios.

Pero el modelo del negocio puede impulsar una estructura basada no simplemente en perfiles sino también en funciones. En este caso, pueden darse el caso de que muy a pesar de existir un perfil no todos los usuarios para un mismo perfil cumplen las mismas funciones y/o actividades. De este modo estamos en una situación diferente. La estructura organizacional impone un nuevo diseño en la base de datos.
Tal vez se pueda conseguir haciendo un esquema de sub-perfiles. Es decir que un usuario tiene un perfil y además un sub-perfil. De este modo se podría hacer indicar con un sub-perfil cuales son las funciones que cumple.

Tal vez el esquema sea:

Perfiles -1---M- SubPerfil
Perfiles -1---M- Usuarios
SubPerfil -1--M-Funciones

El esquema es un ejemplo. Es para dar una idea.

¿Hemos terminado? No... Nos queda otra situación más extrema por analizar: ¿Puede existir el caso en que un usuario tenga muchos perfiles y a su vez, que cumpla ciertas funciones, no necesariamente obligatorias para un sólo perfil? Si. ¿Es tu caso?

Pues deberás analizar.
¿Porqué te comento esto? Pues por el modo en como has dado a conocer tu problema intuyo que el modelo más simple no te será de total agrado (al menos eso me indica un primer vistazo rápido de tu mensaje).

Si dices que si hay diferentes perfiles (el perfil de administrador es uno de ellos) y que cada uno tiene un nivel de acceso entonces es muy claro que deberás estructurar tus tablas de modo que:

1. Una persona tenga un perfil.
2. Una persona tenga un nivel de acceso.

Ahora me hago la pregunta ¿El nivel de acceso es dependiente sólo para los administradores? ¿O por el contrario, tiene cierto significado para otros perfiles?

Dependiendo de tu respuesta sabrás si existe alguna relación entre la tabla Perfil y la tabla NivelAcceso.

Si supongo que el nivel de acceso no depende del perfil se podría, en una primera aproximación, decir que:

NivelAcceso -1---M- Usuarios -M---1- Perfil

Como vez, el asunto obligadamente requiere de un análisis y deberá venir en última de ti.
Si tienes mayores dudas, puedes consultarnos. Aqui estaremos para asesorarte.

Mientras tanto busca definir que tan elaborado tiene que ser el manejo de los perfiles y esas particularidades.

Saludos,

roman 13-06-2008 03:04:20

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

Spynosa 13-06-2008 07:55:09

podias probar estos componentes que son gratis


La franja horaria es GMT +2. Ahora son las 05:23:08.

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