Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Función Menu Dinámico (users) BD (https://www.clubdelphi.com/foros/showthread.php?t=81889)

mantraxer21 30-12-2012 01:29:42

Función Menu Dinámico (users) BD
 
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:
Código SQL [-]
CREATE TABLE `usuario_menu`
  UsuarioId AS INT,
  OpcionId AS INT;

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

De esta forma:
Código SQL [-]
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

Cita:

Empezado por mantraxer21 (Mensaje 452666)
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

Código Delphi [-]
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

Resuelto
 
Gracias por sus apuntes e ideas, tema solucionado !


La franja horaria es GMT +2. Ahora son las 20:20:21.

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