DimoSecurity BBDD- v1.0.1.0
| Autor | Manuel Baez |
| Fecha |
|
| Estado |
|
| Ambiente |
|
REGISTRO DE CAMBIOS
- Agregar el servicio de validar permiso para cambio de datos.
- Agregar el servicio para cerrar el permiso cuando el usuario cambia sus datos y cerrar la incidencia.
OBJETOS AFECTADOS
BBDD BAPY@CREDITOPY (10.5.2.30:1521)
PRE-REQUISITOS
IMPLEMENTACION
- EJECUTAR EN LA BBDD DE BAPY@CREDITOPY (10.5.2.30:1521) EL SGTE QUERY:
INSERT PARA LAS VALIDACIONES
INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES (ID_API_SP, CATEGORIA, DESCRIPCION, API_PATH_GROUP, API_PATH_VERSION, API_PATH_NAME, PROCEDURE_DATABASE, PROCEDURE_SCHEMA, PROCEDURE_NAME, SIMPLIFICAR_RESPONSE_S_N, FECHA_HORA_INS, USUARIO_INS, FECHA_HORA_UPD, USUARIO_UPD) VALUES(105, 'DIMO SECURITY', 'Verificar que el usuario tenga permisos para modificar los datos', 'security', 'v1', 'validarPermiso', 'BAPY', 'creditopy', 'PKG_DIMO_SECURITY.PR_VALIDAR_PERMISO_DATOS', 'S', sysdate, 'asosa', sysdate, 'asosa'); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE) VALUES(105, 1, 'documento', 'TEXTO', 'S', 'N', NULL); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE) VALUES(105, 2, 'codigo', 'TEXTO', 'S', 'N', NULL); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N) VALUES(105, 1, 'validado', 'NUMERO', 'S'); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N) VALUES(105, 2, 'descripcion', 'TEXTO', 'S'); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES (ID_API_SP, CATEGORIA, DESCRIPCION, API_PATH_GROUP, API_PATH_VERSION, API_PATH_NAME, PROCEDURE_DATABASE, PROCEDURE_SCHEMA, PROCEDURE_NAME, SIMPLIFICAR_RESPONSE_S_N, FECHA_HORA_INS, USUARIO_INS, FECHA_HORA_UPD, USUARIO_UPD) VALUES(106, 'DIMO SECURITY', 'Sacar el permiso al usuario', 'security', 'v1', 'sacarPermiso', 'BAPY', 'creditopy', 'PKG_DIMO_SECURITY.PR_CERRAR_PERMISO_DATOS', 'S', sysdate, 'asosa', sysdate, 'asosa'); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE) VALUES(106, 1, 'documento', 'TEXTO', 'S', 'N', NULL); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE) VALUES(106, 2, 'codigo', 'TEXTO', 'S', 'N', NULL); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N) VALUES(106, 1, 'validado', 'NUMERO', 'S'); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N) VALUES(106, 2, 'descripcion', 'TEXTO', 'S'); INSERT INTO DIMO_SICOOP.T_WEBSERVICE (WEBSERVICE_ID, CODE, REFERENCE, URL, NAMESPACE, SERVICENAME, CONNECT_TIMEOUT, CALL_TIMEOUT, MAX_RETRY, ENABLED, LAST_USER, LAST_TIME, URL_ALT) VALUES(112, 'WS_VALID_CAMBIO_DATO', 'Web service para validar permisos', 'http://10.5.1.30:8083/ws-tarjetahabiente/prmservices/v2/sprunner/security/v1/validarPermiso', 'espacio', 'service', 60000, 60000, NULL, 1, 'asosa', sysdate, NULL); INSERT INTO DIMO_SICOOP.T_WEBSERVICE (WEBSERVICE_ID, CODE, REFERENCE, URL, NAMESPACE, SERVICENAME, CONNECT_TIMEOUT, CALL_TIMEOUT, MAX_RETRY, ENABLED, LAST_USER, LAST_TIME, URL_ALT) VALUES(113, 'WS_CERRAR_CAMBIO_DATO', 'Web service para validar permisos', 'http://10.5.1.30:8083/ws-tarjetahabiente/prmservices/v2/sprunner/security/v1/sacarPermiso', 'espacio', 'service', 60000, 60000, NULL, 1, 'asosa', sysdate, NULL);
CREAR EL PAQUETE
/* MODIFICACION DE LA CABECERA (ESPECIFICACION DEL PACKAGE) */
CREATE OR REPLACE PACKAGE CREDITOPY.PKG_DIMO_SECURITY IS
-- AUTOR: MANU BAEZ
-- Fecha Creación: 07/10/2024
PROCEDURE PR_VALIDAR_TOKEN_TARJ (
P_NUM_TARJ IN NUMBER,
P_AFINIDAD OUT NUMBER,
P_EMISOR OUT NUMBER,
P_VINCULADO OUT NUMBER,
P_DOCUMENTO OUT VARCHAR2,
P_VINC_DESC OUT VARCHAR2
);
-- AUTOR: ARTURO SOSA
-- Fecha Creación: 08/10/2024
PROCEDURE PR_VALIDAR_PERMISO_DATOS (
CP_documento IN VARCHAR2,
CP_codigo IN VARCHAR2,
NP_validado OUT NUMBER,
CP_descripcion OUT VARCHAR2
);
-- AUTOR: ARTURO SOSA
-- Fecha Creación: 08/10/2024
PROCEDURE PR_CERRAR_PERMISO_DATOS (
CP_documento IN VARCHAR2,
CP_codigo IN VARCHAR2,
NP_validado OUT NUMBER,
CP_descripcion OUT VARCHAR2
);
END PKG_DIMO_SECURITY;
/* MODIFICACION DEL BODY (PACKAGE BODY) */
CREATE OR REPLACE PACKAGE BODY CREDITOPY.PKG_DIMO_SECURITY IS
/* VALIDAR PERMISOS DEL USUARIO PARA CAMBIAR LOS DATOS DE SU CUENTA */
/*
AUTOR: MANUEL BAEZ
FECHA CREACION: 07/10/2024
DESCRIPCION:
FECHA MODIFICACION:
DESCRIPCION DE CAMBIOS:
*/
PROCEDURE PR_VALIDAR_TOKEN_TARJ (
P_NUM_TARJ IN NUMBER,
P_AFINIDAD OUT NUMBER,
P_EMISOR OUT NUMBER,
P_VINCULADO OUT NUMBER,
P_DOCUMENTO OUT VARCHAR2,
P_VINC_DESC OUT VARCHAR2
) IS
V_VALIDAR NUMBER;
P_TARJ_ENCRI VARCHAR2(100); -- Declarar la variable que faltaba
BEGIN
SELECT CREDITOPY.FC_PAN2CRIPTO(P_NUM_TARJ)
INTO P_TARJ_ENCRI
FROM DUAL;
-- Primera consulta corregida (remover la coma antes de INTO)
SELECT T.EMISOR,
T.DOCUMENTO,
T.GRUPO_AFINIDAD
INTO P_EMISOR, P_DOCUMENTO, P_AFINIDAD
FROM CREDITOPY.TARJETAS T
WHERE T.TARJETA = P_TARJ_ENCRI;
P_DOCUMENTO := TO_CHAR(TO_NUMBER(SUBSTR(P_DOCUMENTO, 4)));
BEGIN
-- Tercera consulta
SELECT ESTADO
INTO V_VALIDAR
FROM CREDITOPY.DIMO_TC_VINC_PROCESO dtvp
WHERE dtvp.DOCUMENTO = P_DOCUMENTO
AND dtvp.TARJETA = P_TARJ_ENCRI
AND ROWNUM = 1
ORDER BY dtvp.fecha_hora_ins DESC;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_VALIDAR := 3; -- Si no se encuentra ninguna fila, asigna el valor 3
END;
-- Estructura condicional IF en lugar de CASE
CASE V_VALIDAR
WHEN 0 THEN
P_VINCULADO := 0;
P_VINC_DESC := 'EL USUARIO NO COMPLETO EL INTENTO';
WHEN 1 THEN
P_VINCULADO := 1;
P_VINC_DESC := 'EL USUARIO VINCULO CORRECTAMENTE';
WHEN 2 THEN
P_VINCULADO := 0;
P_VINC_DESC := 'EL USUARIO FALLO EN RESPONDER LAS PREGUNTAS DE SEGURIDAD';
ELSE
P_VINCULADO := 0;
P_VINC_DESC := 'EL USUARIO AUN NO INTENTO VINCULAR';
END CASE;
END PR_VALIDAR_TOKEN_TARJ;
/* VALIDAR PERMISOS DEL USUARIO PARA CAMBIAR LOS DATOS DE SU CUENTA */
/*
AUTOR: ARTURO SOSA
FECHA CREACION: 08/10/2024
DESCRIPCION: Este procedimiento recibe el documento del usuario y debe controlar:
1. Que el documento pertenezca a un usario.
2. Si el usuario está validado por ATC (FLAG DIMO_SICOOP.D_CLIENTE@SICOOP => FLAG_VALIDADO_ATC).
3. Si tiene abierto la incidencia para cambio de ese dato ().
4. Si el usuario tiene permiso para cambiar ese dato (DIMO_SICOOP.D_FUNCIONALIDAD => ).
Solo si cumple esos requisitos, debe devolver validado = true
DEUDA TECNICA:El MACHEO DE CODIGO BACKEND e ID_TIPO_INCIDENCIA "está en duro" (no es critico, por que coinciden en ambos ambientes)
FECHA MODIFICACION:
DESCRIPCION DE CAMBIOS:
*/
PROCEDURE PR_VALIDAR_PERMISO_DATOS (
CP_documento IN VARCHAR2,
CP_codigo IN VARCHAR2,
NP_validado OUT NUMBER,
CP_descripcion OUT VARCHAR2
) IS
V_CLIENTE_ID NUMBER;
V_FLAG_VALIDADO_ATC NUMBER;
V_TIPO_INCIDENCIA_ID NUMBER;
V_CLIENTE_INCIDENCIA_ID NUMBER;
V_VALIDADO NUMBER;
BEGIN
--VALIDAR QUE EL DOCUMENTO SEA USUARIO Y ESTÉ VALIDADO POR ATC
BEGIN
SELECT dc.CLIENTE_ID, dc.FLAG_VALIDADO_ATC
INTO V_CLIENTE_ID, V_FLAG_VALIDADO_ATC
FROM DIMO_SICOOP.D_CLIENTE@SICOOP dc
WHERE dc.CI = CP_documento;
EXCEPTION
WHEN OTHERS THEN
V_CLIENTE_ID := 0;
CP_descripcion := 'Error inesperado: ' || SQLERRM;
END;
--SI ES USUARIO DIMO
IF V_CLIENTE_ID != 0 THEN
--SI ES USUARIO DIMO y SI ESTÄ HABILITADO POR ATC
IF V_FLAG_VALIDADO_ATC = 1 THEN
--VERIFICACION PARA OBTENER EL TIPO_INCIDENCIA_ID.
CASE CP_codigo
WHEN 'PERFILMOD_CELLPHONE' THEN
V_TIPO_INCIDENCIA_ID := 20;
WHEN 'PERFILMOD_EMAIL' THEN
V_TIPO_INCIDENCIA_ID := 19;
WHEN 'PERFILMOD_DATA' THEN
V_TIPO_INCIDENCIA_ID := 18;
ELSE
V_TIPO_INCIDENCIA_ID := 0;
END CASE;
--SI ES UN TIPO DE INCIDENCIA VALIDO
IF V_TIPO_INCIDENCIA_ID != 0 THEN
--OBTENER EL ID DE LA INCIDENICA Y EL ESTADO
BEGIN
SELECT dci.CLIENTE_INCIDENCIA_ID
INTO V_CLIENTE_INCIDENCIA_ID
FROM DIMO_SICOOP.D_CLIENTE_INCIDENCIA@SICOOP dci
WHERE dci.CLIENTE_ID = V_CLIENTE_ID AND dci.TIPO_INCIDENCIA_ID = V_TIPO_INCIDENCIA_ID AND dci.ESTADO = 1
AND ROWNUM = 1;
EXCEPTION
WHEN OTHERS THEN
V_CLIENTE_INCIDENCIA_ID := 0;
END;
--SI TIENE LA INCIDENCIA
IF V_CLIENTE_INCIDENCIA_ID != 0 THEN
--VERIFICAR SI TIENE EL PERMISO HABILITADO
BEGIN
SELECT dfd.ACTIVO INTO V_VALIDADO
FROM DIMO_SICOOP.D_FUNCIONALIDAD_DOC@SICOOP dfd
WHERE dfd.DOCUMENTO = CP_documento AND dfd.ACTIVO = 1
AND dfd.FUNCIONALIDAD_ID = (SELECT df.FUNCIONALIDAD_ID FROM DIMO_SICOOP.D_FUNCIONALIDAD@SICOOP df WHERE df.CODIGO = CP_codigo);
EXCEPTION
WHEN OTHERS THEN
V_VALIDADO := 0;
/*BEGIN
dbms_output.put_line('documento:'||CP_documento);
dbms_output.put_line('codigo:'||CP_codigo);
dbms_output.put_line(sqlerrm);
END;*/
END;
IF V_VALIDADO = 1 THEN
NP_validado := 1;
CP_descripcion := 'El usuario tiene los permisos para cambiar el dato';
ELSE
NP_validado := 0;
CP_descripcion := 'El usuario no tiene permiso de ATC para cambiar el dato';
END IF;
--EL DOCUMENTO NO TIENE LA INCIDENCIA
ELSE
NP_validado := 0;
CP_descripcion := 'No existe la incidencia valida para ese documento';
END IF;
ELSE
NP_validado := 0;
CP_descripcion := 'No corresponde el tipo de incidencia';
END IF;
--NO ESTÁ HABILITADO POR ATC
ELSE
NP_validado := 0;
CP_descripcion := 'El usuario no está habilitado por ATC';
END IF;
--NO ES USUARIO DIMO
ELSE
NP_validado := 0;
CP_descripcion := 'El documento ingresado no pertenece a ningún usuario';
END IF;
END PR_VALIDAR_PERMISO_DATOS;
/* CERRAR LOS PERMISOS DEL USUARIO AL CAMBIAR LOS DATOS DE SU CUENTA */
/*
AUTOR: ARTURO SOSA
FECHA CREACION: 08/10/2024
DESCRIPCION: Este procedimiento debe:
1. Debe verificar que el usuario tenga habilitado ese permiso.
2. Sacarle el permiso al usuario de modificar sus datos.
3. Cerrar la incidencia.
4. Dejar el registro del detalle de la incidencia.
DEUDA TECNICA:El MACHEO DE CODIGO BACKEND e ID_TIPO_INCIDENCIA "está en duro" (no es critico, por que coinciden en ambos ambientes)
FECHA MODIFICACION:
DESCRIPCION DE CAMBIOS:
*/
PROCEDURE PR_CERRAR_PERMISO_DATOS (
CP_documento IN VARCHAR2,
CP_codigo IN VARCHAR2,
NP_validado OUT NUMBER,
CP_descripcion OUT VARCHAR2
) IS
V_VALIDADO NUMBER;
V_VALIDADO_DESC VARCHAR2(100);
V_TIPO_INCIDENCIA_ID NUMBER;
V_CLIENTE_INCIDENCIA_ID NUMBER;
V_ID_DETALLE NUMBER;
BEGIN
--VERIFICAR QUE EL USUARIO TENGA EL PERMISO PARA CAMBIAR EL DATO
BEGIN
V_VALIDADO_DESC := 'Sin validar';
CREDITOPY.PKG_DIMO_SECURITY.PR_VALIDAR_PERMISO_DATOS(CP_documento, CP_codigo, V_VALIDADO, V_VALIDADO_DESC);
END;
--USUARIO VALIDADO PARA CAMBIAR EL DATO
IF V_VALIDADO = 1 THEN
--SACARLE EL PERMISO AL USUARIO
UPDATE DIMO_SICOOP.D_FUNCIONALIDAD_DOC@SICOOP dfd
SET dfd.ACTIVO = 0
WHERE dfd.DOCUMENTO = CP_documento AND dfd.ACTIVO = 1
AND dfd.FUNCIONALIDAD_ID = (SELECT df.FUNCIONALIDAD_ID FROM DIMO_SICOOP.D_FUNCIONALIDAD@SICOOP df WHERE df.CODIGO = CP_codigo);
--CERRAR LA INCIDENCIA
CASE CP_codigo
WHEN 'PERFILMOD_CELLPHONE' THEN
V_TIPO_INCIDENCIA_ID := 20;
WHEN 'PERFILMOD_EMAIL' THEN
V_TIPO_INCIDENCIA_ID := 19;
WHEN 'PERFILMOD_DATA' THEN
V_TIPO_INCIDENCIA_ID := 18;
ELSE
V_TIPO_INCIDENCIA_ID := 0;
END CASE;
--RECUPERAR ID DE LA INCIDENCIA
BEGIN
SELECT dci.CLIENTE_INCIDENCIA_ID
INTO V_CLIENTE_INCIDENCIA_ID
FROM DIMO_SICOOP.D_CLIENTE_INCIDENCIA@SICOOP dci
WHERE dci.TIPO_INCIDENCIA_ID = V_TIPO_INCIDENCIA_ID AND dci.ESTADO = 1
AND dci.CLIENTE_ID = (SELECT dc.CLIENTE_ID FROM DIMO_SICOOP.D_CLIENTE@SICOOP dc WHERE dc.CI = CP_documento);
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_CLIENTE_INCIDENCIA_ID := 0;
END;
IF V_CLIENTE_INCIDENCIA_ID != 0 THEN
--ACTUALIZAR CABECERA
UPDATE DIMO_SICOOP.D_CLIENTE_INCIDENCIA@SICOOP dci
SET dci.ESTADO = 2
WHERE dci.CLIENTE_INCIDENCIA_ID = V_CLIENTE_INCIDENCIA_ID;
SELECT DIMO_SICOOP.S_D_CLIENTE_INCIDENCIA_DETALLE.nextval@SICOOP INTO V_ID_DETALLE FROM dual;
--INSERTAR DETALLE
INSERT INTO DIMO_SICOOP.D_CLIENTE_INCIDENCIA_DETALLE@SICOOP
(CLIENTE_INCIDENCIA_DETALLE_ID, CLIENTE_INCIDENCIA_ID, USUARIO_CRM, FECHA, CAMBIO_ESTADO, DESCRIPCION)
VALUES(V_ID_DETALLE, V_CLIENTE_INCIDENCIA_ID, 'BACKEND', sysdate, '2', 'SE SACA EL PERMISO');
NP_validado := 1;
CP_descripcion := 'Se Cerraron las incidencias y se saco el permiso al usuario';
ELSE
NP_validado := 0;
CP_descripcion := 'No se encontró una incidencia válida para el usuario';
END IF;
--EL USUARIO NO PUEDE CAMBIAR EL DATO
ELSE
NP_validado := 0;
CP_descripcion := V_VALIDADO_DESC;
END IF;
END PR_CERRAR_PERMISO_DATOS;
END PKG_DIMO_SECURITY;
ROLLBACK
- NO POSEE ROLLBACK