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 31-10-2008
jandj jandj is offline
Miembro
 
Registrado: abr 2008
Posts: 21
Poder: 0
jandj Va por buen camino
Arrow login con niveles

hola a todos, necesito ayuda. Estoy creando un login con niveles dependiendo el usuario que entre me explico si me logueo como administrador quiero habilitar el menu de configuracion de usuarios, si me logueo como usuario normal que se desabilite la configuracion de usuario. si necesitan saber algo mas solo posteenlo aqui!. he visto unos cuantos link del club pero ninguno me a cumplido. tengo el login echo solo quiero que se desabiliten o habiliten las opciones del menu segun el nivel del usuario. solo son dos niveles administradores y usuarios normales.

codigo del button entrar del login sin niveles:

procedure TfrmLogin.Button1Click(Sender: TObject);
var
user: string;
clave: String;
begin
user:=edit1.Text;
clave:=edit2.text;
if (user='') or (clave='') then begin
showmessage('Debe Introducir un Usuario y Contraseña');
exit;
end
else
table1.Open;
with table1 do
locate('User;Clave',vararrayof([user,clave]),[]);
if table1.Locate('User;Clave',vararrayof([user,clave]),[]) then
begin
ModalResult := mrOK;
showmessage('Bienvenido al sistema '+user+'');
end
else
begin
inc(intento);
if intento = 1 then
begin
showmessage('Clave o Usuario Incorrectos Le Queda Un Intento');
edit1.SetFocus;
end
else
begin
showmessage('Usted No Tiene Acesso Al Sistema');
close;
end;
end;
table1.Close;
end;

-------------------------------------
Pregunta: Donde coloco el codigo de identificacion de los niveles y donde va el codigo de habilitar o deshabilitar? y si tienen algun ejemplo por favor.
-------------------------------------
codigo que he puesto en el proyecto
---------------------------------------
var
frmlogin: tfrmLogin;
begin
Application.Initialize;
frmlogin:= Tfrmlogin.Create(Application);
if frmlogin.showmodal = MrOk then
begin
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TAboutBox, AboutBox);
Application.CreateForm(TfrmLogin, frmLogin);
Application.CreateForm(TDataModule1, DataModule1);
Application.CreateForm(TForm1, Form1);
frmlogin.free;
Application.Run;
end
else
begin
application.Terminate;
end;

------------------------------------------
Responder Con Cita
  #2  
Antiguo 31-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola jandj, deberías tener un campo nivel, así cuando encuentras al usuario, recuperas el nivel al que pertenece y muestras o no las opciones.

Digamos que tu TMenuItem de tu MainMenu se llama configuracion.

Código Delphi [-]
if table1.Locate('User;Clave',vararrayof([user,clave]),[]) then
begin
ModalResult := mrOK;
showmessage('Bienvenido al sistema '+user+'');

 if nivel=1 Then
  Configuracion.Visible := True
 else
  Configuracion.Visible := False;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 31-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, para habilitar o deshabilitar segun el nivel, podrias hacer una funcion que te recorriese todos los componentes de la aplicacion, y en el caso de ser TMenuItem entonces comparar:

Código Delphi [-]
 
for i := 0 to Application.ComponentCount - 1 do
      if (Application.Components[i] is TMenuItem) then 
       Application.Components[i].Enabled = nivel_usuario < 2; // por ejemplo

este codigo lo tendrias que poner justo despues de encontrar el nivel_usuario y tambien al crear nuevas forms. saludos.
Responder Con Cita
  #4  
Antiguo 31-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo, solo unas pequeñas observaciones sobre el codigo del amiguito coso. Si recorremos los componentes de Application, lo que obtenemos son los fomularios y no los componentes del formulario actual, y en esta parte "Application.Components[i].Enabled" falta un Cast.

El codigo quedaría así:

Código Delphi [-]
for i := 0 to ComponentCount - 1 do
 begin
  if (Components[i] is TMenuItem) then
   TMenuItem(Components[i]).Enabled := StrToInt(Edit1.Text) < 2;
 end;

Pero con la condición o te habilita todos o te deshabilita todos.

Lo que se me ocurre, sino es solo un MenuItem el que tienes que deshabilitar según el nivel de usurio, es que utilices la propiedad Tag de cada MenuItem, por ejemplo tenemos esto.

Código:
Opcion1(0)     Opcion2(1)     Opcion3(2)
  Opcion11(1)    Opcion21(1)    Opcion31(2)
  Opcion12(2)    Opcion22(1)
  Opcion13(2)
donde el numero entre corchetes sería el numero de Tag que le estarías dando a tu MenuItem, que pueden presentar 3 opciones, en la primera columna la Opcion11 pertenece al nivel 1 la Opcion21 y Opcion22 pertenecen al nivel 2, como se tiene tanto del nivel 1 como del nivel 2 entonces le ponemos al principal con Tag 0, y en las otras opciones como todo pertenece tanto al nivel 1 como al nivel 2 en el principal le ponemos su correspndiente nivel. Talvez no se entiende lo que trato de decir, conste que no soy buena para explicar.

El codigo quedaría así.

Código Delphi [-]
for i := 0 to ComponentCount - 1 do
 begin
  if (Components[i] is TMenuItem) then
   begin
    if (TMenuItem(Components[i]).Tag=StrToInt(nivel)) or (TMenuItem(Components[i]).Tag=0) then
     TMenuItem(Components[i]).Visible := True
    else
      TMenuItem(Components[i]).Visible := False;
   end;
ejemplo
 end;

Utilizo Visible, porque creo que sería mejor no mostrale la opción si no tiene acceso a la misma.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 31-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
ay caro tienes razon, lo escribi rapido y sin mirarlo mucho :

Código Delphi [-]
 
 
const
   menus_a_desactivar : string = 'general, menu1,menu2,...etc';
 
function  MirarSiEsMenuADesactivar(c : TMenuItem) : boolean;
begin
         result := Pos(Lowercase(Trim(stringreplace(c.Caption,'&','',[rfIgnoreCase,rfReplaceAll]))),menus_a_desactivar) <> 0;
end;
 
procedure Desactivar(c : TComponent);
var
        i : integer
begin
         for i := 0 to c.ComponentCount - 1  do
            Desactivar(c.Components[i]);
 
         if c is TMenuItem then 
         if MirarSiEsMenuADesactivar(c) then 
         try 
         (c as TMenuItem).Enabled := false;
         except end;
end;
 
...
         if nivel_usuario < 2 then Desactivar(Application);
...

seria algo asi. Otra manera tambien seria teniendo los nombres de los TMenuItems en una lista (los nombres tal cual: MenuItem1, MenuItem2,...en el otro ejemplo se buscaban por 'caption') y hacer algo como

Código Delphi [-]
 
var
   s : TStringList;
begin
  s := TStringList.Create(self);
  s.Add('MenuItem1');
  s.Add('General1');
  s.Add('VerForm1')
 
  for i := 0 to s.Count - 1 do 
  (Application.FindComponent(s[i]) as TMenuItem).Enabled := nivel_usuario < 2;
 
  s.Free;

Mas o menos son equivalentes. saludos.

Última edición por coso fecha: 31-10-2008 a las 19:46:18.
Responder Con Cita
  #6  
Antiguo 31-10-2008
jandj jandj is offline
Miembro
 
Registrado: abr 2008
Posts: 21
Poder: 0
jandj Va por buen camino
Post Login con Niveles

Gracias a todos por sus ideas, en cuanto vuelva del trabajo y aplique sus ideas le escribo a ver como me va. De nuevo, gracias.
Responder Con Cita
  #7  
Antiguo 31-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Necesitarás una ventana de "gestión de usuarios", esa ventana es donde permites crear nuevos usuarios en el sistema e indicar si es un administrador o no (por ejemplo con un checkBox), puedes guardar ese "checkbox" en la tabla login (tu table1) en un campo llamado "esAdministrador" con valores:
- cero para un usuario normal.
- uno para un admin.

Si son pocas opciones, puedes dejar los botones o menúes del administrador con Visible = False en el Inspector de objetos, y después de hacer el login, justo antes de darle la bienvenida, llamas a tu rutina HazVisibleOpcionesDeAdmin si el campo esAdministrador es igual a 1.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 02-11-2008
jandj jandj is offline
Miembro
 
Registrado: abr 2008
Posts: 21
Poder: 0
jandj Va por buen camino
Thumbs up Login con Niveles (SOLUCIONADO)

Gracias a todos por sus importantes aportes de verdad se lo agradesco mucho.
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
DBGrid con posibilidad de agrupar en niveles... Neftali [Germán.Estévez] OOP 3 29-11-2004 00:58:42
programa por niveles marcelofabiani Varios 2 21-10-2003 18:27:17
Niveles de Acceso/ UTECYBER Varios 5 07-10-2003 20:56:23
Niveles de Acceso/ UTECYBER OOP 5 07-10-2003 20:53:18
niveles en programas marcelofabiani Varios 1 10-05-2003 22:30:15


La franja horaria es GMT +2. Ahora son las 09:06:31.


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