Base de Datos:
Primero que todo recordar que este tutorial se basa en el motor de base de datos Firebird 2.5 (Aunque se puede aplicar sin problemas en otros motores y versiones), continuamos, debemos crear la tabla donde crearemos los usuarios y sus respectivos permisos, ésta es su estructura:
sql
CREATE GENERATOR GEN_USUARIOS_ID; CREATE TABLE USUARIOS ( USER_ID INTEGER NOT NULL, USER_ALIAS VARCHAR(10) NOT NULL, USER_NOMBRE VARCHAR(50) NOT NULL, USER_PASS VARCHAR(50) NOT NULL, USER_STATE SMALLINT, USER_CREADO DATE, USER_MODULOS BLOB SUB_TYPE 1 SEGMENT SIZE 4096 CHARACTER SET ISO8859_1 ); ALTER TABLE USUARIOS ADD CONSTRAINT PK_USUARIOS PRIMARY KEY (USER_ID); CREATE OR ALTER TRIGGER USUARIOS_BI FOR USUARIOS ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.user_id IS NULL) THEN NEW.user_id = gen_id(gen_usuarios_id,1); END
Explico:
USER_ID – El código del usuario.
USER_ALIAS - Es el alias del usuario, esas que utilizas en los foros, correos, etc.
USER_NOMBRE - El nombre completo del Usuario.
USER_PASS – La contraseña del Usuario.
USER_STATE – El estado del usuario (Activo, Bloqueado).
USER_CREADO – La fecha en que se creó ese Usuario.
USER_MODULOS – Aquí se guardarán los permisos de los usuarios, o sea, qué módulos tiene accesos o no.
Espero se haya entendido todo, si es así, continuamos.
Ahora crearemos la clase TUser donde estarán contenidas todas sus propiedades y funciones:
delphi
type TUser = class UID: Integer; UAlias: String; UNombre: String; UClave: String; UState: Integer; UPermisos: TStrings; end;
No creo que lo anterior requiera de explicación ya que se sobre-entiende, si no es así háganmelo saber. Antes debemos crear primero la ventana de login para continuar con las funciones y procedimientos para su funcionamiento, necesitaremos lo siguiente:
- 2 TLabels
- 2 TEdits
- 1 TButton.
Ya que tenemos la ventana de acceso (Login) procedemos a crear algunas funciones.
Login:
La función login se encargará de determinar si los datos de acceso proporcionado por el usuario son correcto o no y así dar paso al sistema, hacemos la declaración en la clase TUser:
delphi
type TUser = class UID: Integer; UAlias: String; UNombre: String; UClave: String; UState: Integer; UPermisos: TStrings; function login(user: String; clave: String): Boolean; end;
y el código es el siguiente:
delphi
function TUser.login(user: string; clave: string): Boolean; var Login: TFDQuery; //Componentes FireDAC, puedes hacer uso de otros. begin Login := TFDQuery.Create(nil); Login.Connection := Datos.dbDatos; //Datos es el DataModule y dbDatos es un TFDConnection //Primero verificamos si existe el usuario (Alias) Login.SQL.Text := 'SELECT USER_ID, USER_ALIAS, USER_NOMBRE, USER_PASS, USER_STATE FROM USUARIOS WHERE USER_ALIAS = :ALIAS'; Login.ParamByName('ALIAS').AsString := User; try Login.Open; Except On E:EFDDBEngineException do begin MessageDLG(E.Message,mtError,[mbOk],0); Abort; end; end; //Si existe el usuario comparamos la clave/contraseña if not Login.IsEmpty then begin if (Login.FieldByName('USER_STATE').AsInteger = 1) then begin if (Login.FieldByName('USER_PASS').AsString = Clave) then begin Result := True; //Devolvemos verdadero si concuerda //Cargamos algunos datos del usuario UID := Login.FieldByName('USER_ID').AsInteger; UAlias := Login.FieldByName('USER_ALIAS').AsString; UNombre := Login.FieldByName('USER_NOMBRE').AsString; end else begin Result := False; //Devolvemos Falso si no concuerda MessageDLG('¡La contraseña no es correcta!, intentelo de nuevo.',mtError,[mbOk],0); end; end else begin Result := False; // Devolvemos Falso si no existe el usuario MessageDLG('¡Usuario incorrecto!',mtError,[mbOk],0); end; end else begin Result := False; //Devolvemos Falso si el usuario está suspendido por el administrador MessageDLG('Este usuario está suspendido. Por Favor contacte con el administrador',mtWarning,[mbOk],0); end; Login.Free; //Liberamos la consulta end;
Volvemos a la ventana del Login, doble click al botón y colocamos el siguiente código:
delphi
procedure TFLogin.Button1Click(Sender: TObject); var User: TUser; begin User := TUser.Create; //Hacemos el Login if User.login(edAlias.Text,edClave.Text) then Close; //Si los datos son verdaderos cerramos la ventana de login User.Free; end;
Ahora veremos como cargar la ventana de login antes de acceder al sistema y hacer la prueba de acceso, haremos que los formularios se auto-creen al inicio del sistema excepto el de Login, o sea, Project->Options->Forms->Auto-Create forms, aquí colocamos el DataModule si existe y el formulario principal, en Available Forms colocamos el formulario Login (En este caso lo llamé FLogin), en el evento OnShow del formulario principal (En este Caso lo llamé FPrincipal), colocamos lo siguiente:
delphi
procedure TFPrincipal.FormShow(Sender: TObject); begin //Mostramos la pantalla de inicio FLogin := TFLogin.Create(Self); try FLogin.ShowModal; finally Flogin.Free; end; end;
Ejecutamos la aplicación y nos debe de salir la ventana de acceso, si no es así, algún paso debes haber saltado, revise de nuevo e inténtelo otra vez, caso contrario, introducimos los datos de usuario y ya debemos accesar al formulario principal, (Recuerden que debe haber un usuario creado en la BD para que funcione).
Eso es todo en esta primera parte, en la próxima veremos cómo crear los usuarios y sus respectivos permisos.
Espero lo disfruten.