418 lines
14 KiB
Transact-SQL
418 lines
14 KiB
Transact-SQL
SET ANSI_NULLS ON;
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioGetByName]
|
|
@NombreUsuario varchar(100),
|
|
@CveUsuarioEjecuta int,
|
|
@ErrorMostrar varchar(max) OUTPUT,
|
|
@ErrorTipo int OUTPUT,
|
|
@Return bit OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
|
|
|
BEGIN TRY
|
|
SELECT TOP (1)
|
|
U.[CveUsuario], U.[NombreUsuario], U.[HashContrasena], U.[CorreoElectronico],
|
|
U.[CveRol], R.[NombreRol], U.[Activo], U.[DebeCambiarContrasena],
|
|
U.[IntentosFallidosInicioSesion], U.[BloqueadoHasta],
|
|
U.[FechaUltimoInicioSesion], U.[FechaUltimaConexion], U.[CorreoVerificado]
|
|
FROM [dbo].[Sis_Usuarios] AS U INNER JOIN [dbo].[Sis_Roles] AS R ON R.[CveRol] = U.[CveRol]
|
|
WHERE U.[NombreUsuario] = @NombreUsuario
|
|
AND U.[Borrado] = (0)
|
|
AND R.[Borrado] = (0);
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar el usuario; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioGetByName'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioLoginSuccessUpdate]
|
|
@CveUsuario int,
|
|
@CveUsuarioEjecuta int,
|
|
@ErrorMostrar varchar(max) OUTPUT,
|
|
@ErrorTipo int OUTPUT,
|
|
@Return bit OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
|
|
|
BEGIN TRY
|
|
UPDATE [dbo].[Sis_Usuarios]
|
|
SET [FechaUltimoInicioSesion] = GETDATE(),
|
|
[FechaUltimaConexion] = GETDATE(),
|
|
[IntentosFallidosInicioSesion] = (0),
|
|
[BloqueadoHasta] = NULL,
|
|
[FechaActualizacion] = GETDATE()
|
|
WHERE [CveUsuario] = @CveUsuario
|
|
AND [Borrado] = (0);
|
|
|
|
IF @@ROWCOUNT = (0)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El usuario ya no está disponible.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al actualizar el inicio de sesión; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioLoginSuccessUpdate'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioLoginFailedUpdate]
|
|
@CveUsuario int,
|
|
@CveUsuarioEjecuta int,
|
|
@ErrorMostrar varchar(max) OUTPUT,
|
|
@ErrorTipo int OUTPUT,
|
|
@Return bit OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
|
|
|
BEGIN TRY
|
|
UPDATE [dbo].[Sis_Usuarios]
|
|
SET [IntentosFallidosInicioSesion] = [IntentosFallidosInicioSesion] + (1),
|
|
[BloqueadoHasta] = CASE
|
|
WHEN [IntentosFallidosInicioSesion] + (1) >= (5)
|
|
THEN DATEADD(MINUTE, (15), GETDATE())
|
|
ELSE [BloqueadoHasta]
|
|
END,
|
|
[FechaActualizacion] = GETDATE()
|
|
WHERE [CveUsuario] = @CveUsuario
|
|
AND [Borrado] = (0);
|
|
|
|
IF @@ROWCOUNT = (0)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El usuario ya no está disponible.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al registrar el intento de acceso; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioLoginFailedUpdate'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_IntentoInicioSesionAdd]
|
|
@CveUsuario int = NULL,
|
|
@NombreUsuario varchar(100),
|
|
@Exitoso bit,
|
|
@MotivoFallo varchar(200) = NULL,
|
|
@DireccionIP varchar(50) = NULL,
|
|
@AgenteUsuario varchar(1000) = NULL,
|
|
@NombreDominio varchar(255) = NULL,
|
|
@CveUsuarioEjecuta int,
|
|
@ErrorMostrar varchar(max) OUTPUT,
|
|
@ErrorTipo int OUTPUT,
|
|
@Return bit OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
|
|
|
BEGIN TRY
|
|
INSERT INTO [dbo].[Sis_IntentosInicioSesion]
|
|
([CveUsuario], [NombreUsuario], [Exitoso], [MotivoFallo],
|
|
[DireccionIP], [AgenteUsuario], [NombreDominio])
|
|
VALUES
|
|
(@CveUsuario, @NombreUsuario, @Exitoso, @MotivoFallo,
|
|
@DireccionIP, @AgenteUsuario, @NombreDominio);
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al registrar el intento de acceso; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_IntentoInicioSesionAdd'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioSesionAdd]
|
|
@CveUsuario int,
|
|
@TokenSesion varchar(200),
|
|
@DireccionIP varchar(50) = NULL,
|
|
@AgenteUsuario varchar(1000) = NULL,
|
|
@NombreDominio varchar(255) = NULL,
|
|
@CveUsuarioEjecuta int,
|
|
@ErrorMostrar varchar(max) OUTPUT,
|
|
@ErrorTipo int OUTPUT,
|
|
@Return bit OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
|
|
|
BEGIN TRY
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1 FROM [dbo].[Sis_Usuarios]
|
|
WHERE [CveUsuario] = @CveUsuario AND [Activo] = (1) AND [Borrado] = (0)
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El usuario no está disponible para iniciar sesión.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
INSERT INTO [dbo].[Sis_UsuariosSesiones]
|
|
([CveUsuario], [TokenSesion], [DireccionIP], [AgenteUsuario],
|
|
[NombreDominio], [FechaUltimaActividad])
|
|
VALUES
|
|
(@CveUsuario, @TokenSesion, @DireccionIP, @AgenteUsuario,
|
|
@NombreDominio, GETDATE());
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al crear la sesión; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioSesionAdd'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioSesionEnd]
|
|
@TokenSesion varchar(200),
|
|
@CveUsuarioEjecuta int,
|
|
@ErrorMostrar varchar(max) OUTPUT,
|
|
@ErrorTipo int OUTPUT,
|
|
@Return bit OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
|
|
|
BEGIN TRY
|
|
UPDATE [dbo].[Sis_UsuariosSesiones]
|
|
SET [FechaFin] = GETDATE(), [Activo] = (0)
|
|
WHERE [TokenSesion] = @TokenSesion
|
|
AND [Borrado] = (0);
|
|
|
|
/* Cerrar una sesión inexistente o ya cerrada es una operación idempotente. */
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al cerrar la sesión; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioSesionEnd'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_PermisoCheck]
|
|
@CodigoPermiso varchar(100),
|
|
@CveUsuarioEjecuta int,
|
|
@ErrorMostrar varchar(max) OUTPUT,
|
|
@ErrorTipo int OUTPUT,
|
|
@Return bit OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
|
|
|
BEGIN TRY
|
|
DECLARE @CveRol int;
|
|
DECLARE @PermisoUsuario bit;
|
|
|
|
SELECT @CveRol = [CveRol]
|
|
FROM [dbo].[Sis_Usuarios]
|
|
WHERE [CveUsuario] = @CveUsuarioEjecuta
|
|
AND [Activo] = (1)
|
|
AND [Borrado] = (0);
|
|
|
|
SELECT TOP (1) @PermisoUsuario = UP.[Permitido]
|
|
FROM [dbo].[Sis_UsuariosPermisos] AS UP
|
|
INNER JOIN [dbo].[Sis_Permisos] AS P ON P.[CvePermiso] = UP.[CvePermiso]
|
|
WHERE UP.[CveUsuario] = @CveUsuarioEjecuta
|
|
AND P.[CodigoPermiso] = @CodigoPermiso
|
|
AND P.[Activo] = (1)
|
|
AND UP.[Borrado] = (0)
|
|
AND P.[Borrado] = (0);
|
|
|
|
IF @PermisoUsuario IS NOT NULL
|
|
SELECT CAST(@PermisoUsuario AS bit) AS [Permitido];
|
|
ELSE IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM [dbo].[Sis_RolesPermisos] AS RP
|
|
INNER JOIN [dbo].[Sis_Permisos] AS P ON P.[CvePermiso] = RP.[CvePermiso]
|
|
WHERE RP.[CveRol] = @CveRol
|
|
AND P.[CodigoPermiso] = @CodigoPermiso
|
|
AND RP.[Permitido] = (1)
|
|
AND P.[Activo] = (1)
|
|
AND RP.[Borrado] = (0)
|
|
AND P.[Borrado] = (0)
|
|
)
|
|
SELECT CAST((1) AS bit) AS [Permitido];
|
|
ELSE
|
|
SELECT CAST((0) AS bit) AS [Permitido];
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar los permisos; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_PermisoCheck'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_PaginaAccessCheck]
|
|
@PaginaUrl varchar(500),
|
|
@CveUsuarioEjecuta int,
|
|
@ErrorMostrar varchar(max) OUTPUT,
|
|
@ErrorTipo int OUTPUT,
|
|
@Return bit OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
|
|
|
BEGIN TRY
|
|
DECLARE @CveRol int;
|
|
DECLARE @PuedeAcceder bit = (0);
|
|
|
|
SELECT @CveRol = [CveRol]
|
|
FROM [dbo].[Sis_Usuarios]
|
|
WHERE [CveUsuario] = @CveUsuarioEjecuta
|
|
AND [Activo] = (1)
|
|
AND [Borrado] = (0);
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM [dbo].[Sis_Modulos] AS M
|
|
INNER JOIN [dbo].[Sis_RolesModulos] AS RM ON RM.[CveModulo] = M.[CveModulo]
|
|
WHERE RM.[CveRol] = @CveRol
|
|
AND RM.[PuedeVer] = (1)
|
|
AND M.[Activo] = (1)
|
|
AND RM.[Borrado] = (0)
|
|
AND M.[Borrado] = (0)
|
|
AND
|
|
(
|
|
LOWER(REPLACE(M.[Url], '~/', '')) = LOWER(@PaginaUrl)
|
|
OR LOWER(REPLACE(M.[Url], '/', '')) = LOWER(REPLACE(@PaginaUrl, '/', ''))
|
|
)
|
|
)
|
|
SET @PuedeAcceder = (1);
|
|
ELSE IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM [dbo].[Sis_Modulos] AS M
|
|
WHERE M.[Activo] = (1)
|
|
AND M.[Borrado] = (0)
|
|
AND LOWER(REPLACE(M.[Url], '~/', '')) = LOWER(@PaginaUrl)
|
|
)
|
|
SET @PuedeAcceder = (0);
|
|
ELSE IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM [dbo].[Sis_UsuariosPermisos] AS UP
|
|
INNER JOIN [dbo].[Sis_Permisos] AS P ON P.[CvePermiso] = UP.[CvePermiso]
|
|
WHERE UP.[CveUsuario] = @CveUsuarioEjecuta
|
|
AND P.[CodigoPermiso] = 'System.Access'
|
|
AND UP.[Permitido] = (1)
|
|
AND P.[Activo] = (1)
|
|
AND UP.[Borrado] = (0)
|
|
AND P.[Borrado] = (0)
|
|
)
|
|
SET @PuedeAcceder = (1);
|
|
ELSE IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM [dbo].[Sis_RolesPermisos] AS RP
|
|
INNER JOIN [dbo].[Sis_Permisos] AS P ON P.[CvePermiso] = RP.[CvePermiso]
|
|
WHERE RP.[CveRol] = @CveRol
|
|
AND P.[CodigoPermiso] = 'System.Access'
|
|
AND RP.[Permitido] = (1)
|
|
AND P.[Activo] = (1)
|
|
AND RP.[Borrado] = (0)
|
|
AND P.[Borrado] = (0)
|
|
)
|
|
SET @PuedeAcceder = (1);
|
|
|
|
SELECT @PuedeAcceder AS [PuedeAcceder];
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al validar el acceso; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_PaginaAccessCheck'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_MenuList]
|
|
@CveRol int,
|
|
@CveUsuarioEjecuta int,
|
|
@ErrorMostrar varchar(max) OUTPUT,
|
|
@ErrorTipo int OUTPUT,
|
|
@Return bit OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
|
|
|
BEGIN TRY
|
|
SELECT DISTINCT
|
|
M.[CveModulo], M.[CveModuloPadre], M.[NombreModulo], M.[Url],
|
|
M.[ClaseCssIcono], M.[ClaseCssEstilo], M.[OrdenVisualizacion], M.[Visible]
|
|
FROM [dbo].[Sis_Modulos] AS M
|
|
INNER JOIN [dbo].[Sis_RolesModulos] AS RM ON RM.[CveModulo] = M.[CveModulo]
|
|
WHERE RM.[CveRol] = @CveRol
|
|
AND RM.[PuedeVer] = (1)
|
|
AND M.[Activo] = (1)
|
|
AND M.[Visible] = (1)
|
|
AND RM.[Borrado] = (0)
|
|
AND M.[Borrado] = (0)
|
|
ORDER BY M.[OrdenVisualizacion], M.[NombreModulo];
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar el menú; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_MenuList'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|