Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ayuda con diseño de Tablas de Permisos Para usuarios (https://www.clubdelphi.com/foros/showthread.php?t=78207)

microbiano 29-03-2012 07:20:09

Ayuda con diseño de Tablas de Permisos Para usuarios
 
hola amigos del foro, despues de un rato regreso con ustedes para plantarles mi problematica.

resulta que tengo que diseñar la tabla de permisos para usuario y de paso haber si me pueden echar una manita ejemplo.


Administrador:

permisos para:

* insertar
* modificar
* eliminar
* impresion


Usuario 1:

permisos:

* insertar
* modificar

permisos 2:

* eliminar
* impresion

tienen alguna sugerencia para diseñar esto.

ahora bien como le haria para validar los permisos que tiene cada usuario?, perdon pero es la primera aplicacion que hago de este tipo anteriormente todo se dejaba a al base de datos que por cierto es sqlserver 2000. de antemano muchas gracias.

o alguien podria darme un ejemplo de roles y permisos por favor;

no me preocupa la activacion o desactivacion de los botones.

José Luis Garcí 29-03-2012 08:44:53

Hola microbiano, te pongo como lo solucione yo, para la tabla usuarios, encripto la clave de acceso, pero no el ususario y el nivel de usuario (parte fundamental de mi sistema).

Cuando carga el usuario en el acceso, carga una variable el nivel de usuario, luego en el action list, tengo una funcion que carga los form comprobando si tienes nivel de usuario suficiente, en tu caso si lo quieres puedes usarlo, directamente , en las cationes o directamente en los onclick de los botones y la propiedad tag, basta con un simple
Código Delphi [-]
if varINivelUsuario >=Button.Tag then
....(codigo a evaluar)
end else Showmmesage('No tiene el nivel necesario, para ejecutar este apartado');

Te comento que en el tag uso niveles del 0 al 9
donde:
0 es invitado, (no necesita clave)
1-5 (Básico)
6-7 (para usuario de alto permiso)
8 (supervisor)
9 (pide nuevamente la clave del usuario, normalmente lo uso en apartador que necesitan un nivel de usuari superior a 6)

Espero te sea util.

José Luis Garcí 29-03-2012 08:57:45

Se me ocurre que tambien puedes crear botones (partiendo del que uses, con tres o Seis nuevas propiedades), como idea te propondria las siguientes propiedades:

NivelUsuario: tipo integer;
Clave: Tipo String
UsarClave: Tipo Boolean
---------------------------(Más complejo)
UsarClaveusuario: Tipo Boolean (te permite usar la clave de usuario)
Datasource: TdataSource
Field: Tfield (para el campo de la base de datos, supuestamente Usuarios, campo ClavedeAcceso)

carlo_acp 30-03-2012 17:17:02

Me parece muy buena la respuesta, yo le valido desde el OnShow del form, según los permisos que tenga, le inhabilito el botón relacionado a la operación, es decir si
no tiene permiso para editar, btnEditar.enabled:= false, asi sucesivamente.

Saludos

microbiano 31-03-2012 07:16:35

amigos seria mucho pedir un ejemplo simple para darme una idea de como se manejarian los menus con el TActions List y los permisos de antemano muchas gracias

José Luis Garcí 31-03-2012 11:06:27

1 Archivos Adjunto(s)
Creamos un nuevo projecto, ponemos de la pestaña Standard 1 edit,1 ActionList, 1 MainMenu, 3 Botones,
de la pestaña additional ponemos un StaticText y de la pestaña win32 un Statusbar, quedaria más o menos así:



Ponemos el StaticText el autosize en false y ponemos el siguiente texto

Cita:

0=(Cualquiera)
4=0400
6=0600
7=AlfaDog
8=0A8l0f0a
9=L0e1v2e3l495

Clave=Nova

Pinchamos en el statusbar 2 veces y creamos dos paneles, al primero ponemos el Width a 400 y en el segundo rellenamos el text con lo siguiente

Cita:

Nivel de usuario [ ]


Ponemos el Statusbar en Autohin picamos el Checked y en el Formulario lo mismo en ShowHint.

Ahora abrimos el codigo del formulario y des pues de



Código Delphi [-]
var
  Form1: TForm1;

creamos la variable VarINivelUsuario quedando de la siguiente manera

Código Delphi [-]
var
  Form1: TForm1;
  VarINivelUsuario:Integer;

Volvemos al modo diseño yn en los evento vuscamos el OnCreate, pichamos y ponemos el Siguiente Código

Código Delphi [-]
   VarINivelUsuario:=0;
   StatusBar1.Panels[1].Text:='Nivel de usuario [0]';
   Edit1.Enabled:=False;
   Edit1.Text:='';
   Edit1.PasswordChar:='*';


Pinchamos en el ActionList dos veces y nos sale esta pantalla



Pinchamos en New Action (con el ratón botón derecho o en el icono de carpeta con un asterisco rojo) y
rellenamos los datos en el object inspector de la siguiente manera



Creamos las siguientes actiones

Cita:

A_Salir, Tag=0, caption=Salir y hint=Salimos del programa
A_CambiarNivel, Tag=0, caption=Cambiar nivel de usuario y hint=Cambia el nivel de usuario para acceder a las diferentes zonas
A_nivel4, Tag=4, caption=Nivel 4 y hint=Necesitas nivel
A_nivel6, Tag=6, caption=Nivel 6 y hint=Necesitas nivel
A_nivel7, Tag=7, caption=Nivel 7 y hint=Necesitas nivel
A_nivel8, Tag=8, caption=Nivel 8 y hint=Necesitas nivel
A_nivel9, Tag=9, caption=Nivel 9 y hint=Necesitas nivel 9 y clave de seguridad
Una vez terminado, pinchamos en A_Salir y ponemos el siguiente codigo en A_SalirExecute

Código Delphi [-]
   Application.Terminate;

Ahora pinchamos en A_CambiarNivel y ponemos el siguiente código

Código Delphi [-]
    Edit1.Enabled:=True;
    Edit1.SetFocus;

Seguimos con los niveles del 4 al 8 y en cada uno ponemos el siguiente codigo, cambiandolo por el numero del nivel
tanto en donde miramos el tag como en los textos, quedando el código

Código Delphi [-]
//Para nivel 4
    if VarINivelUsuario>=A_nivel4.Tag then ShowMessage('Usted a accedido, al nivel 4')
                                      else ShowMessage(A_nivel4.Hint+' para poder acceder');
//Para nivel 6
    if VarINivelUsuario>=A_nivel6.Tag then ShowMessage('Usted a accedido, al nivel 6')
                                      else ShowMessage(A_nivel6.Hint+' para poder acceder');
//Para nivel 7
    if VarINivelUsuario>=A_nivel7.Tag then ShowMessage('Usted a accedido, al nivel 7')
                                      else ShowMessage(A_nivel7.Hint+' para poder acceder');
//Para nivel 8
    if VarINivelUsuario>=A_nivel8.Tag then ShowMessage('Usted a accedido, al nivel 8')
                                      else ShowMessage(A_nivel8.Hint+' para poder acceder');
Y por último nivel 9 con el código

Código Delphi [-]
    if VarINivelUsuario>=A_nivel9.Tag then
    begin
      Edit1.Enabled:=True;
      Edit1.SetFocus;
    end else ShowMessage('No tiene nivel 9 para poder acceder');


Ahora preparamos el main menu y ponemos en el siguiente orden


Cita:

Caption = Acciones
Action = A_nivel4
Action = A_nivel6
Action = A_nivel7
Action = A_nivel8
Action = A_nivel9
Caption = -
Action = A_CambiarNivel
Caption = -
Action =A_Salir
Quedando el menú de la siguiente manera



Cambiamos el texto del Button1 a Ejecutar edit y el botton2 el action a A_CambiarNivel
Pinchamos dos veces en el button1 y ponemos el siguiente código

Código Delphi [-]
var VarBPro:Boolean;  //Para comrpobar si se ha ejecutado algún proceso
begin
    VarBPro:=false;
    if VarINivelUsuario=9 then
    begin
       if UpperCase(Edit1.Text)='NOVA' then
       BEGIN
           VarBPro:=True;
           ShowMessage('ES USTED USUARIO DE NIVEL 9 Y CONOCE LA CLAVE, FELICIDADES');
       END Else ShowMessage('La Clave introducida no Es Valida');
    end;
    if (VarBPro=false) and (UpperCase(Edit1.Text)='0400') then
    begin
       VarBPro:=True;
       StatusBar1.Panels[1].Text:='Nivel de usuario [4]';
       VarINivelUsuario:=4;
    end;
    if (VarBPro=false) and (UpperCase(Edit1.Text)='0600') then
    begin
       VarBPro:=True;
       StatusBar1.Panels[1].Text:='Nivel de usuario [6]';
       VarINivelUsuario:=6;
    end;
    if (VarBPro=false) and (UpperCase(Edit1.Text)='ALFADOG') then
    begin
       VarBPro:=True;
       StatusBar1.Panels[1].Text:='Nivel de usuario [7]';
       VarINivelUsuario:=7;
    end;
    if (VarBPro=false) and (UpperCase(Edit1.Text)='0A8L0F0A') then
    begin
       VarBPro:=True;
       StatusBar1.Panels[1].Text:='Nivel de usuario [8]';
       VarINivelUsuario:=8;
    end;
    if (VarBPro=false) and (UpperCase(Edit1.Text)='L0E1V2E3L495') then
    begin
       VarBPro:=True;
       StatusBar1.Panels[1].Text:='Nivel de usuario [9]';
       VarINivelUsuario:=9;
    end;
    if (VarBPro=false) then
    begin
       StatusBar1.Panels[1].Text:='Nivel de usuario [0]';
       VarINivelUsuario:=0;
    end;
    Edit1.Text:='';
    Edit1.Enabled:=False;
end;

y hemos terminado, ten en cuenta que con esta demo una vez metas el nivel 9, no te dejara cambiar de nivel, ya que esta hecha muy básica, podría arreglarse con otra variable local, para saber si se ha pulsado cambio de nivel de usuario o solicitud de clave, espero te sirva de ayuda


Código del Ejemplo


La franja horaria es GMT +2. Ahora son las 00:16:37.

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