PDA

Ver la Versión Completa : Función Menu Dinámico (users) BD


mantraxer21
30-12-2012, 01:29:42
Estiamdos,

Alguna idea de "Code" respecto a un menu dinámico con Un Motor de Datos ...

Ejemplo

Usuarios XXX (Lectura de Ficheros, Listar, Consultas y Búsquedas)
Usuarios YYY (Inserciones - Modificaciones, Listar, Consultar, Buscar)
Usuarios ZZZ ( Modificaciones, Lecturas, Inserciones, Listar, Buscar)

Al momento de loguearse en el sistema, este sea capaz de llamar a alguna función que cargue las opciones del menú y saber que opciones sí puede ejecutar o ver un usuario logueado. Creo y supongo que las opciones del menú tienen que estar cargadas en el motor de datos...

Alguien tiene ideas, script para empezar un empujón ==??????

Gracias

Ñuño Martínez
30-12-2012, 19:19:43
Esto es bastante común, y yo lo hice en la última empresa en la que trabajé.

Una forma de hacerlo es creando una tabla que indique qué opciones están disponibles. Sería algo así como:

CREATE TABLE `usuario_menu`
UsuarioId AS INT,
OpcionId AS INT;


madre mía, que ya se me ha olvidado cómo programar SQL, menudas navidades...:o

De esta forma:
SELECT OpcionId FROM usuario_menu WHERE UsuarioId = $Id;

Evidentemente "$Id" es el identificador del usuario.

Otra posibilidad es hacer lo mismo, pero en vez de asociar a usuarios, asociándolo a grupos de usuarios.

MartinS
02-01-2013, 14:44:18
Estiamdos,

Alguna idea de "Code" respecto a un menu dinámico con Un Motor de Datos ...

Ejemplo

Usuarios XXX (Lectura de Ficheros, Listar, Consultas y Búsquedas)
Usuarios YYY (Inserciones - Modificaciones, Listar, Consultar, Buscar)
Usuarios ZZZ ( Modificaciones, Lecturas, Inserciones, Listar, Buscar)

Al momento de loguearse en el sistema, este sea capaz de llamar a alguna función que cargue las opciones del menú y saber que opciones sí puede ejecutar o ver un usuario logueado. Creo y supongo que las opciones del menú tienen que estar cargadas en el motor de datos...

Alguien tiene ideas, script para empezar un empujón ==??????

Gracias

Hola: Te detallo mas o menos como lo realizo yo:

Cada usuario que se loguea en el sistema tiene un "nivel" de permiso para operar, es decir, uno de los campos de la tabla de usuarios contempla el nivel (Es este caso, Administradores, operativos, Casuales "solo consulta". Tambien podria ser 0,1,2 etc). Le asigno por importacia un numero que va de 0 a 2 a la propiedad tag de cada uno de los items del menu al momento del diseño de este y luego con un procedimiento que le puse como nombre Nivel que se ejecuta despues del logueo del usuario, es el siguiente

Procedure TPPrincipal.Nivel;
Var I,Seguro : Integer;
begin
if Dm.TipoUsers = 'Administradores' then
Seguro := 2 else
if Dm.TipoUsers = 'Operativos' then
Seguro := 1 else
Seguro := 0;
if Seguro = 2 then // Admin
For i := 0 to ComponentCount -1 do
Begin
if (Components[i] Is TMenuItem) then
Begin
if (Components[i] as TMenuItem).Tag in [0..2] then
(Components[i] as TMenuItem).Enabled := True;
End;
End;
if Seguro = 1 then // Operarios
For i := 0 to ComponentCount -1 do
Begin
if (Components[i] Is TMenuItem) then
Begin
if (Components[i] as TMenuItem).Tag in [0..1] then
(Components[i] as TMenuItem).Enabled := True else
(Components[i] as TMenuItem).Enabled := False;
End;
End;
if Seguro = 0 then // Casual
For i := 0 to ComponentCount -1 do
Begin
if (Components[i] Is TMenuItem) then
Begin
if (Components[i] as TMenuItem).Tag = 0 then
(Components[i] as TMenuItem).Enabled := True else
(Components[i] as TMenuItem).Enabled := False;
End;
End;

end;


Yo lo que hago, como podras apreciar, es deshabilitar el items que no corresponde por nivel de usuario, pero podrias cambiarle la propiedad enabled por visible y deberia funcionar o aproximarse a lo que estas pidiendo.

Espero que haya sido de utilidad.

Saludos y felicidades ^\||/

mantraxer21
17-02-2013, 17:18:25
Gracias por sus apuntes e ideas, tema solucionado !