Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-08-2011
mantraxer21 mantraxer21 is offline
Miembro
 
Registrado: ago 2010
Posts: 94
Poder: 14
mantraxer21 Va por buen camino
Action List + BD

Estimados:

Estoy haciendo un form que permita administrar el o los accesos de cada usuario a las opciones del menu, segú su nivel de acceso.

Trabajo con Firebird 2.5.

La base de datos tiene.

tabla usuario compuesta asi.

iduser
username
password
email
name_user
idNivel

Tabla Nivel_Acceso compuesta así.

idNivel
Nivel

Alguien por ahi me recomendó trabajar con ActionList, pero la verdad nunca lo he ocupado, diciendo que podía dejar valores enabled:= false en cada opción del menú que el usuario no tenga acceso.

Nosé si alguién ha trabajado con esto, haciendo un recorrido al verificar el usuario y password del form logín, entonces, habilita o desabilita él o las opciones según su Nivel de Acceso.

Gracias

Saludos Cordiales
Responder Con Cita
  #2  
Antiguo 14-08-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Hola.

Te comento como lo hago yo.

Aparte del fichero de usuarios que ya tienes yo manejo un fichero de opciones activas del menú por cada usuario. Tengo un mantenimiento de este fichero en el cuál por cada usuario se activan o desactivan las opciones del menú a las que puede acceder el mismo. Para esto uso un treeview que creo en función a las opciones del menú y se pueden activar o desactivar las mismas que quedaría de la siguiente manera:

Uploaded with ImageShack.us

El código para componer las opciones a partir del menú es el siguiente:

Código Delphi [-]
procedure TNTFormUsuarios.ActualizoArbol;
var
LinMenu,LinHijos,N,M: SmallInt;
NodoPadre,NodoHijo: TTreeNode;
TablaLin: TedbTable;
sAux: String;
begin
  Screen.Cursor := CrSqlWait;
  TablaLin:=Bd.DameTabla('USUARIOSLINEAS');
  TablaLin.IndexName := 'USUARIO';
  TablaLin.SetRangeStart ;
  TablaLin.FieldByName('USUARIO').AsString:=NtEditCodigo.DameValor;
  TablaLin.SetRangeEnd ;
  TablaLin.FieldByName('USUARIO').AsString:=NtEditCodigo.DameValor;
  TablaLin.ApplyRange ;
  // Primero creo el arbol con las opciones del menú
  LinMenu:=FormMenu.MenuPrincipal.Items.Count;
  TreeView1.Items.Clear;
  for N:=0 To LinMenu-1 do begin
    // Inserto Nodo padre
    NodoPadre:=TreeView1.Items.Add(nil,StrTran(FormMenu.MenuPrincipal.Items[N].Caption,'&',''));
    LinHijos:=FormMenu.MenuPrincipal.Items[N].Count;
    for M:=0 To LinHijos-1 do begin
      if FormMenu.MenuPrincipal.Items[N].Items[M].Caption<>'-'  then begin
        NodoHijo:=TreeView1.Items.AddChild(NodoPadre,StrTran(FormMenu.MenuPrincipal.Items[N].Items[M].Caption,'&',''));
        NodoHijo.StateIndex := 1;
      end;
    end;
  end;
  // Desmarco todas las opciones
  NtButton2.Click;
  // Una vez creado compruebo si tiene lineas para chequear o quitar
  TablaLin.First;
  while not TablaLin.Eof do begin
    for N:=0 to Treeview1.Items.Count-1 do begin
      if (TreeView1.Items[N] as TTreeNode ).Level=0 then
        sAux:=TreeView1.Items[N].Text;
      if TablaLin.FieldByName('OPCION').AsString=sAux+'#'+TreeView1.Items[N].Text then begin
        TreeView1.Items[N].StateIndex := 2;
        break;
      end;
    end;
    TablaLin.Next;
  end;
  Screen.Cursor := CrDefault;
end;

Con este código creo el árbol de opciones del menú y las activo o desactivo en función de si está la opción en la tabla o no. En la misma linea del registro pongo el nombre del caption del MenuItem (el que sale en la parte superior)+ '#' + el caption de la opción del MenuItem que sale en el menú.

Cuando grabas el usuario con las opciones de menú chequeadas hago lo siguiente:

Código Delphi [-]
procedure TNTFormUsuarios.RegistroGrabado(Sender: TObject);
var
TablaLin: TedbTable;
N: SmallInt;
sAux: String;
begin
  // Borro y vuelvo a regenerar lineas de permisos
  DataModule1.EDBQuery1.SQL.Clear;
  DataModule1.EDBQuery1.SQL.Add('DELETE FROM USUARIOSLINEAS WHERE USUARIO='+QuotedStr(NtEditCodigo.Damevalor));
  DataModule1.EDBQuery1.ExecSQL;
  //
  TablaLin:=Bd.DameTabla('USUARIOSLINEAS');
  for N:=0 to Treeview1.Items.Count-1 do begin
    if (TreeView1.Items[N] as TTreeNode ).Level=0 then
      sAux:=TreeView1.Items[N].Text;
    // Solo incluyo los permitidos
    if TreeView1.Items[N].StateIndex = 2 then begin
      TablaLin.Append;
      TablaLin.FieldByName('USUARIO').AsString:=NtEditCodigo.Damevalor;
      TablaLin.FieldByName('OPCION').AsString:=sAux+'#'+TreeView1.Items[N].Text ;
      TablaLin.Post;
    end;
  end;
  Bd.CierraTabla(TablaLin);
end;

Con esto dejo en la tabla de lineas por usuario solo las opciones de menú permitidas para el usuario, las demás no las grabo.

Después de esto ya solo te queda poner en el menú principal las acciones para habilitar o deshabilitar las opciones de menú según te interese:

Código Delphi [-]
    // COMPONGO MENU SEGUN USUARIO
    Tablausuarios:=Bd.DameTabla ('USUARIOS');
    TablaUsuarios.IndexName:='CODIGO';
    TablaUsuarios.FindKey ([Ntlabel3.caption]);
    DataModule1.EDBQuery1.SQL.Clear;
    DataModule1.EDBQuery1.SQL.Add('SELECT * FROM USUARIOSLINEAS WHERE UPPER(USUARIO)='+QuotedStr(UpperCase(NtLabel3.Caption)));
    DataModule1.EDBQuery1.ExecSQL;
    DataModule1.EDBQuery1.First;
    while not DataModule1.EDBQuery1.Eof do begin
      sAux:=DataModule1.EDBQuery1.FieldByName('OPCION').AsString;
      for N:= 0 to MenuPrincipal.Items.Count-1 do begin
        if StrTran(MenuPrincipal.Items[N].Caption,'&','') = Copy(sAux,1,Pos('#',sAux)-1) then begin
          for M:=0 To MenuPrincipal.Items[N].Count-1 do begin
            if Copy(sAux,Pos('#',sAux)+1,100)=MenuPrincipal.Items[N].Items[M].Caption then begin
              MenuPrincipal.Items[N].Items[M].Enabled := True;
              break;
            end;
          end;
        end;
      end;
      DataModule1.EDBQuery1.Next;
    end;

Espero que todo este rollo te ayude.
Saludos
__________________
Be water my friend.

Última edición por newtron fecha: 14-08-2011 a las 09:44:41.
Responder Con Cita
  #3  
Antiguo 15-08-2011
mantraxer21 mantraxer21 is offline
Miembro
 
Registrado: ago 2010
Posts: 94
Poder: 14
mantraxer21 Va por buen camino
Wink

Okas

Muchas Gracias...

Revisando y entendiendo !!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
captions de action lists pvizcay Varios 4 24-11-2008 17:57:00
Asignar un Action por su nombre JROMAN OOP 2 05-08-2008 17:31:05
Ayuda sobre un action list Oni Varios 2 04-05-2006 18:12:50
grafico de php en action script srangel PHP 1 09-02-2005 16:11:24
Ayuda Con el Action Manager edgusano Varios 1 26-07-2004 01:12:21


La franja horaria es GMT +2. Ahora son las 23:51:09.


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
Copyright 1996-2007 Club Delphi