git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES2/trunk@301 f4e31baf-9722-1c47-927c-6f952f962d4b
209 lines
5.9 KiB
ObjectPascal
209 lines
5.9 KiB
ObjectPascal
unit srvLogin_Impl;
|
|
|
|
{----------------------------------------------------------------------------}
|
|
{ This unit was automatically generated by the RemObjects SDK after reading }
|
|
{ the RODL file associated with this project . }
|
|
{ }
|
|
{ This is where you are supposed to code the implementation of your objects. }
|
|
{----------------------------------------------------------------------------}
|
|
|
|
interface
|
|
|
|
uses
|
|
{vcl:} Classes, SysUtils,
|
|
{RemObjects:} uROXMLIntf, uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions,
|
|
{Required:} uRORemoteDataModule,
|
|
{Ancestor Implementation:} DataAbstractService_Impl,
|
|
{Used RODLs:} DataAbstract4_Intf,
|
|
{Generated:} FactuGES_Intf, uDAClasses, uDAInterfaces, uDAEngine,
|
|
uDADataTable, uDABINAdapter, uROClient, uDADataStreamer, uDABin2DataStreamer;
|
|
|
|
const
|
|
PERFIL_ADMINISTRADORES = 'Administradores';
|
|
|
|
type
|
|
{ TsrvLogin }
|
|
TsrvLogin = class(TDataAbstractService, IsrvLogin)
|
|
Bin2DataStreamer: TDABin2DataStreamer;
|
|
schLogin: TDASchema;
|
|
procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject;
|
|
var aConnectionName: string);
|
|
procedure DataAbstractServiceCreate(Sender: TObject);
|
|
private
|
|
protected
|
|
function Login2(const User: String; const Password: String; out LoginInfo: TRdxLoginInfo): Boolean;
|
|
function Login(const User: String; const Password: String): Boolean;
|
|
procedure Logout;
|
|
function Ping: Boolean;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
{Generated:} FactuGES_Invk, uDataModuleServer,
|
|
Dialogs, IB, Variants, uSesionesUtils;
|
|
|
|
procedure Create_srvLogin(out anInstance : IUnknown);
|
|
begin
|
|
anInstance := TsrvLogin.Create(NIL);
|
|
end;
|
|
|
|
{ srvLogin }
|
|
{ TsrvLogin }
|
|
|
|
procedure TsrvLogin.DataAbstractServiceBeforeAcquireConnection(aSender: TObject;
|
|
var aConnectionName: string);
|
|
begin
|
|
ConnectionName := dmServer.ConnectionName;
|
|
end;
|
|
|
|
procedure TsrvLogin.DataAbstractServiceCreate(Sender: TObject);
|
|
begin
|
|
SessionManager := dmServer.SessionManager;
|
|
end;
|
|
|
|
function TsrvLogin.Login(const User, Password: String): Boolean;
|
|
var
|
|
dsUser,
|
|
dsPerfiles,
|
|
dsEmpresas : IDADataset;
|
|
LoginInfo : TRdxLoginInfo;
|
|
begin
|
|
LoginInfo := NIL;
|
|
Result := False;
|
|
|
|
dsUser := schLogin.NewDataset(Connection, 'UsuarioPermitido', ['Usuario', 'Pass'], [User, Password]);
|
|
|
|
if (dsUser.RecordCount = 1) then
|
|
begin
|
|
try
|
|
LoginInfo := TRdxLoginInfo.Create();
|
|
with LoginInfo do
|
|
begin
|
|
UserID := dsUser.FieldValues[0];
|
|
Usuario := User;
|
|
SessionID := GUIDToString(Session.SessionID);
|
|
Perfiles := StringArray.Create();
|
|
Empresas := TRdxEmpresasArray.Create;
|
|
end;
|
|
|
|
// Asigna los perfiles del usuario
|
|
LoginInfo.Perfiles.Clear;
|
|
dsPerfiles := schLogin.NewDataset(Connection, 'PerfilesUsuario', ['ID_USUARIO'], [LoginInfo.UserID]);
|
|
while not dsPerfiles.EOF do
|
|
begin
|
|
LoginInfo.Perfiles.Add(VarToStr(dsPerfiles.FieldValues[0]));
|
|
dsPerfiles.Next;
|
|
end;
|
|
|
|
// Asigna las empresas del usuario
|
|
LoginInfo.Empresas.Clear;
|
|
dsEmpresas := schLogin.NewDataset(Connection, 'EmpresasUsuario', ['ID_USUARIO'], [LoginInfo.UserID]);
|
|
while not dsEmpresas.EOF do
|
|
begin
|
|
LoginInfo.Empresas.Add(dsEmpresas.FieldValues[0]);
|
|
dsEmpresas.Next;
|
|
end;
|
|
|
|
SesionesHelper.SaveSessionObject(Session, SESION_LOGININFO, LoginInfo);
|
|
|
|
Result := True;
|
|
except
|
|
on e : exception do
|
|
begin
|
|
ShowMessage(e.Message);
|
|
raise
|
|
end;
|
|
end;
|
|
end
|
|
else begin
|
|
// Invalid login. The temporary session is not to be kept.
|
|
DestroySession;
|
|
end;
|
|
end;
|
|
|
|
function TsrvLogin.Login2(const User, Password: String;
|
|
out LoginInfo: TRdxLoginInfo): Boolean;
|
|
var
|
|
dsUser,
|
|
dsPerfiles,
|
|
dsEmpresas : IDADataset;
|
|
InternalLoginInfo : TRdxLoginInfo;
|
|
begin
|
|
LoginInfo := NIL;
|
|
Result := False;
|
|
|
|
dsUser := schLogin.NewDataset(Connection, 'UsuarioPermitido', ['Usuario', 'Pass'], [User, Password]);
|
|
|
|
if (dsUser.RecordCount = 1) then
|
|
begin
|
|
try
|
|
LoginInfo := TRdxLoginInfo.Create();
|
|
with LoginInfo do
|
|
begin
|
|
UserID := dsUser.FieldValues[0];
|
|
Usuario := User;
|
|
SessionID := GUIDToString(Session.SessionID);
|
|
Perfiles := StringArray.Create();
|
|
Empresas := TRdxEmpresasArray.Create;
|
|
end;
|
|
|
|
// Asigna los perfiles del usuario
|
|
LoginInfo.Perfiles.Clear;
|
|
dsPerfiles := schLogin.NewDataset(Connection, 'PerfilesUsuario', ['ID_USUARIO'], [LoginInfo.UserID]);
|
|
while not dsPerfiles.EOF do
|
|
begin
|
|
LoginInfo.Perfiles.Add(VarToStr(dsPerfiles.FieldValues[0]));
|
|
dsPerfiles.Next;
|
|
end;
|
|
|
|
// Asigna las empresas del usuario
|
|
LoginInfo.Empresas.Clear;
|
|
dsEmpresas := schLogin.NewDataset(Connection, 'EmpresasUsuario', ['ID_USUARIO'], [LoginInfo.UserID]);
|
|
while not dsEmpresas.EOF do
|
|
begin
|
|
LoginInfo.Empresas.Add(dsEmpresas.FieldValues[0]);
|
|
dsEmpresas.Next;
|
|
end;
|
|
|
|
// Guardamos una copia de LoginInfo en el servidor para usarlo
|
|
// en otros servicios
|
|
InternalLoginInfo := TRdxLoginInfo.Create;
|
|
InternalLoginInfo.Assign(LoginInfo);
|
|
SesionesHelper.SaveSessionObject(Session, SESION_LOGININFO, InternalLoginInfo);
|
|
|
|
Result := True;
|
|
except
|
|
on e : exception do
|
|
begin
|
|
FreeAndNIL(LoginInfo);
|
|
ShowMessage(e.Message);
|
|
raise
|
|
end;
|
|
end;
|
|
end
|
|
else begin
|
|
// Invalid login. The temporary session is not to be kept.
|
|
DestroySession;
|
|
end;
|
|
end;
|
|
|
|
procedure TsrvLogin.Logout;
|
|
begin
|
|
DestroySession;
|
|
end;
|
|
|
|
function TsrvLogin.Ping: Boolean;
|
|
begin
|
|
Result := True;
|
|
end;
|
|
|
|
initialization
|
|
TROClassFactory.Create('srvLogin', Create_srvLogin, TsrvLogin_Invoker);
|
|
|
|
finalization
|
|
|
|
end.
|