PDA

Ver la Versión Completa : novato en Delphi 7


cyber_zero
12-05-2008, 00:16:08
hola buenas tardes foro, se que esto podria llegar a sonar muy, pero muy raro a este nivel, pero tengo duda sobre como puedo ocultar algo para diferentes usuarios.

El problema es que para acceder a la aplicacion pido una contraseña, y dependiendo del usuario es los privilegios que se le otorgan dentro de la misma aplicacion, como borrar algo o acivar botones, alguien me podria ayudar, de antemano se los agradezco, gracias.

hugo_Junior
12-05-2008, 00:24:59
{Este es un ejemplo con un menú con prioridades, espero que te sirva}
User,Task,I,X:Integer;
begin
ing_clave.visible:=false;
ing_clave.Enabled:=false;{ing_clave es el formulario donde de loguea}
User:=ing_clave.dbedit1.Field.Value;

For X:=0 to principal.Menu.Items.Count -1 do
For I:=0 to principal.Menu.Items.Items[X].Count -1 do
begin
Task:=principal.Menu.Items[X].Items[I].Tag;
principal.Menu.Items[X].Items[I].Visible := true;
If datamodule1.tb_Habilitaciones.Locate('codigo de Usuario;codigo de Opciones', vararrayof ([User,Task]),[]) then
If datamodule1.Tb_Habilitacioneshabilitaciones.Value = 'N' then
principal.Menu.Items[X].Items[I].Visible := False ;
End;
{tenés que hacer una tabla con las habilitaciones correspondientes a cada usuario}
tabla habilitaciones
cod de usuario(numérico)
cod de opciones(numérico)
habilitaciones(alfanumérico)

cyber_zero
12-05-2008, 00:28:57
{Este es un ejemplo con un menú con prioridades, espero que te sirva}
User,Task,I,X:Integer;
begin
ing_clave.visible:=false;
ing_clave.Enabled:=false;{ing_clave es el formulario donde de loguea}
User:=ing_clave.dbedit1.Field.Value;

For X:=0 to principal.Menu.Items.Count -1 do
For I:=0 to principal.Menu.Items.Items[X].Count -1 do
begin
Task:=principal.Menu.Items[X].Items[i].Tag;
principal.Menu.Items[X].Items[i].Visible := true;
If datamodule1.tb_Habilitaciones.Locate('codigo de Usuario;codigo de Opciones', vararrayof ([User,Task]),[]) then
If datamodule1.Tb_Habilitacioneshabilitaciones.Value = 'N' then
principal.Menu.Items[X].Items[i].Visible := False ;
End;
{tenés que hacer una tabla con las habilitaciones correspondientes a cada usuario}
tabla habilitaciones
cod de usuario(numérico)
cod de opciones(numérico)
habilitaciones(alfanumérico)


gracias por la ayuda, y si no te importa me podrias explicar un poco mas como hacerlo, espero no molestar demasiado. gracias de nuevo

Delphius
12-05-2008, 00:29:27
Hola cyber_zero,
Lo que deseas hacer dependerá de como estés estructurando los perfiles y la manera en que llevas los controles.
Una manera, sencilla, de conseguir esto es asociar a los controles algún ID que ese ID represente un perfil determinado.

Por ejemplo, digamos que tienes una tabla perfil cuya estructura es similar a esto:
IDPerfil Nombre
0 Administrador
1 Usuario

Ahora, demosle un uso a la propiedad Tag que posee los controles. Hagamos de cuenta que si Tag es 0 es porque tiene privilegios de administrador, mientras que si es 1 es de usuario.

Al momento de loguearse, podemos entonces capturar ese ID y emplearlo para habilitar/deshabilitar los controles que coincidan con dicho ID.

No se me entiende la idea.

Saludos,

Delphius
12-05-2008, 00:46:13
Por ejemplo este código:


procedure TForm1.HabilitarControles(ID: integer);
var i: integer;
Component: TComponent;
begin
for i := 0 to ComponentCount - 1 do
begin
Component := Components[i];
if (Component as TWinControl).Tag = ID
then (Component as TWinControl).Enabled := True
else (Component as TWinControl).Enabled := False;
end;
end;


Habilita y/o deshabilita controles según un ID.

Hay muchas formas de hacer lo que buscas, sería muy útil que nos detallases mejor tu duda. De este modo podremos ayudarte mejor.

Como dije antes, todo dependerá de como estructures los niveles de permisos, que controles usas... el ejemplo anterior oculta items de un menú... y lo hace en función de un nivel de prioridad que lee desde una tabla de una base de datos.

Si no estás muy puesto en Delphi, esto puede serte muy complicado. Sugiero que nos detalles mejor tu problema para encontrar y/o plantear una solución y/o alternativas adecuadas para ti.

Saludos,

Caral
12-05-2008, 00:57:27
Hola
Modificando el Mini Tutorial Novatos.
Revisa el Form del loguin ahí esta todo.
También revisa la base de datos la tabla usuarios.
Con esto se determina que puede y que no puede hacer un usuario determinado.
Es una de tantas formas de hacerlo, para mi la mas sencilla.
Saludos

cyber_zero
12-05-2008, 01:03:27
Bueno, pues gracias Delphius por la ayuda, mira el problema completo es el siguiente.

Debo realizar un sistema de informacion para un proyecto final, pero a la vez sera util para una escuela, ya tengo hecha la base de datos, el problema que tengo es que soy inexperto en Delphi y no eh programado antes, las mayores dudas que tengo son:

Pantalla de password.
Privilegios a usuarios
Crear una bitacora
Repaldar la informacion

Eh encontrado mucha informacion aqui incluyendo codigo, el problema con eso es que como no se programar, no se como utilizarlo debidamente.

Por eso preguntaba sobre ejemplos o explicaciones mas detalladas, de antemano muchisimas gracias, y espero puedan ayudarme y se los agradeceria mucho.

cyber_zero
12-05-2008, 01:10:20
Hola
Modificando el Mini Tutorial Novatos.
Revisa el Form del loguin ahí esta todo.
También revisa la base de datos la tabla usuarios.
Con esto se determina que puede y que no puede hacer un usuario determinado.
Es una de tantas formas de hacerlo, para mi la mas sencilla.
Saludos

muchisimas gracias Caral, creo que poco a poco estoy entendiendo esto, gracias por su ayuda, espero que me puedan ayudar con el resto gracias de antemano

Delphius
12-05-2008, 01:31:30
Bueno, pues gracias Delphius por la ayuda, mira el problema completo es el siguiente.

Debo realizar un sistema de informacion para un proyecto final, pero a la vez sera util para una escuela, ya tengo hecha la base de datos, el problema que tengo es que soy inexperto en Delphi y no eh programado antes, las mayores dudas que tengo son:

Pantalla de password.
Privilegios a usuarios
Crear una bitacora
Repaldar la informacion

Eh encontrado mucha informacion aqui incluyendo codigo, el problema con eso es que como no se programar, no se como utilizarlo debidamente.

Por eso preguntaba sobre ejemplos o explicaciones mas detalladas, de antemano muchisimas gracias, y espero puedan ayudarme y se los agradeceria mucho.
Me alegro que estés haciendo el trabajo final en Delphi. Haz elegido una buena herramienta.

El problema al que nos enfrentamos nosotros para contigo al asesorarte es precisamente ese: ¿Cómo podemos ayudarte si no nos describes tu problema?
Nos acabas de lanzar la idea, pero no tu idea.

Tienes una base de datos ya hecha. Perfecto, pero sin conocer más o menos como está estructurada no te podemos ser de mayor ayuda.

Aquí podemos exponer miles de ejemplos, y todos pueden no ser compatibles con tu ideas o conceptos.

El mayor peligro cuando uno se enfrenta un diseño de un sistema que hace uso de base de datos es diseñar la base de datos y recién empezar a diseñar el programa. Esto puede llevar a llenar de huecos y parches de código para conseguir adaptar un sistema a la base de datos.
A la inversa, hacer un sistema ciegamente y confiar despues de que el diseño de la base de datos va a funcionar es malo.
Lo correcto: diseñar y estructurar ambas cosas en forma paralela.

No es por criticarte sólo es que tu al tener ya un diseño de la base de datos ahora deberás diseñar un sistema que sea compatible con dicha arquitectura. Y por tanto, como puede requerir 100 lineas de código, como 50, o 25. O hasta, exagerando, 1000.
No se si me hago entender... un mal diseño de una base de datos puede conducir a mucho código. Como también puede suceder lo contrario... mucho código puede que nos solucione algo en la base de datos.
No es por asustarte, no pretendo eso. Sino que te quiero advertir de las consecuencias y limitaciones a las que posiblemente te enfrentarás al momento de sentarte a programar.

Al no saber de que modo estás trabajando díficil será decirte: "si, estás haciendo bien", "estás mal", "Esto se ve más complicado"... "si fuera asi sería más fácil..."

Al ser un iniciado, las cosas la vas a tener un tanto dificil.
Mi consejo: Para ir ganando tiempo, en vez de investigar las mil y un maneras de hacer esto, comienza a picar código con ayuda de algún manual, tutoriales, ejemplos y demás que puedas conseguir en la sección FTP (http://www.terawiki.clubdelphi.com/), Wiki (http://wiki.clubdelphi.com/) y aqui en los foros.
Y antes las dudas, postea y buscaremos la manera de ayudarte. Pero necesariamente deberemos hacerlo en base al diseño de tu base de datos, ya que lo tienes hecho.

Saludos,

cyber_zero
12-05-2008, 01:39:06
te entiendo, ya que en este momento tengo ese problema, hice la base de datos primero y ahorita ya no se como avanzar mas, los tutoriales que eh leido de este foro me han parecido muy buenos, y pues poco a poco le agarre el hilo a Delphi y fue el principal motivo por el que lo elegi.

me gustaria que me ayudaras, a empezar de cero, estoy dispuesto a unas cuantas horas de desvelo si es necesario jajajaja, gracias por el apoyo

Delphius
12-05-2008, 01:57:22
me gustaria que me ayudaras, a empezar de cero, estoy dispuesto a unas cuantas horas de desvelo si es necesario jajajaja, gracias por el apoyo
¿Me estás pidiendo que te ayude, como ser un guia?
Si es eso, lo lamento. No puedo cumplir ese pedido. Me da mucho gusto el que mis palabras te sean de ayuda y me consideres.

Aquí hay muchos que te pueden ayudar, pero cada uno tiene su agenda y sus labores. En los momentos en que uno puede viene ya sea a ayudar o consultar.

Yo ando haciendo eso... vengo de a ratos. Yo estoy haciendo mi trabajo de grado y durante estas semanas voy a estar un poquitín liado.

No quiero comentar mucho porque puede que me anden espiando por aquí... Más de uno de mis amigos seguramente estará esperando que diga una fecha:rolleyes::D

Saludos,