This commit is contained in:
Felipe Batista
2025-01-27 17:44:27 -03:00
commit 47e7f75720
238 changed files with 36425 additions and 0 deletions

View File

@@ -0,0 +1,261 @@
/*
https://docs.nestjs.com/providers#services
*/
import { Injectable } from '@nestjs/common';
import { connectionOptions } from 'src/configs/typeorm.config';
import { Connection } from 'typeorm';
import { IndexActions } from '../../domain/models/index-action.model';
@Injectable()
export class AccessControlService {
async getAccessModule(id: number) {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = 'SELECT ESTACESSOMODULO.CODMODULO as "moduleId" ' +
' ,ESTACESSOMODULO.CODUSUARIO as "userId" ' +
` ,NVL(ESTACESSOMODULO.ACESSO, 'S') as "access" ` +
' FROM ESTACESSOMODULO ' +
' WHERE ESTACESSOMODULO.CODUSUARIO = :1';
const modules = await queryRunner
.query(sql, [id]);
return modules;
} finally {
await queryRunner.release();
await connection.close();
}
}
async getPagesUser(moduleId: number, userId: number) {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = 'SELECT ESTACESSOATIVIDADE.CODMODULO as "moduleId" ' +
' ,ESTACESSOATIVIDADE.CODPROCESSO as "processId" ' +
' ,ESTACESSOATIVIDADE.CODATIVIDADE as "pageId" ' +
' ,ESTACESSOATIVIDADE.codusuario as "userId" ' +
' ,ESTACESSOATIVIDADE.ACESSO as "access" ' +
' FROM ESTACESSOATIVIDADE ' +
' WHERE ESTACESSOATIVIDADE.CODMODULO = :CODMODULO ' +
' AND ESTACESSOATIVIDADE.CODUSUARIO = :CODUSUARIO ';
const pages = await queryRunner
.query(sql, [moduleId, userId]);
return pages;
} finally {
await queryRunner.release();
await connection.close();
}
}
async getActionsUser(moduleId: number, userId: number) {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = `SELECT ESTACESSOATIVIDADEACAO.CODMODULO as "moduleId"
,ESTACESSOATIVIDADEACAO.CODPROCESSO as "processId"
,ESTACESSOATIVIDADEACAO.CODATIVIDADE as "pageId"
,ESTACESSOATIVIDADEACAO.CODACAO as "actionId"
,ESTACESSOATIVIDADEACAO.codusuario as "userId"
,ESTACESSOATIVIDADEACAO.ACESSO as "access"
FROM ESTACESSOATIVIDADEACAO
WHERE ESTACESSOATIVIDADEACAO.CODMODULO = :CODMODULO
AND ESTACESSOATIVIDADEACAO.CODUSUARIO = :CODUSUARIO`;
const actions = await queryRunner
.query(sql, [moduleId, userId]);
return actions;
} finally {
await queryRunner.release();
await connection.close();
}
}
async getPermissionsUser(userId: number) {
const sqlModules = `SELECT ESTMODULO.codmodulo as "id"
,ESTMODULO.descricao as "text"
,${userId} as "userId"
,NVL(( SELECT ESTACESSOMODULO.ACESSO
FROM ESTACESSOMODULO
WHERE ESTACESSOMODULO.CODMODULO = ESTMODULO.CODMODULO
AND ESTACESSOMODULO.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
FROM ESTMODULO`;
const sqlAtividade = `SELECT ESTATIVIDADE.codmodulo as "moduloId"
,ESTATIVIDADE.CODPROCESSO as "processId"
,ESTATIVIDADE.CODATIVIDADE as "id"
,ESTATIVIDADE.descricao as "text"
,NVL(( SELECT ESTACESSOATIVIDADE.ACESSO
FROM ESTACESSOATIVIDADE
WHERE ESTACESSOATIVIDADE.CODMODULO = ESTATIVIDADE.CODMODULO
AND ESTACESSOATIVIDADE.CODPROCESSO = ESTATIVIDADE.codprocesso
AND ESTACESSOATIVIDADE.CODATIVIDADE = ESTATIVIDADE.CODATIVIDADE
AND ESTACESSOATIVIDADE.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
FROM ESTATIVIDADE`;
const sqlAction = `SELECT estatividadeacao.codmodulo as "moduloId"
,estatividadeacao.CODPROCESSO as "processId"
,estatividadeacao.CODATIVIDADE as "atividadeId"
,estatividadeacao.CODACAO as "Id"
,estatividadeacao.descricao as "text"
,NVL(( SELECT ESTACESSOATIVIDADEACAO.ACESSO
FROM ESTACESSOATIVIDADEACAO
WHERE ESTACESSOATIVIDADEACAO.CODMODULO = estatividadeacao.CODMODULO
AND ESTACESSOATIVIDADEACAO.CODPROCESSO = estatividadeacao.codprocesso
AND ESTACESSOATIVIDADEACAO.CODATIVIDADE = estatividadeacao.CODATIVIDADE
AND ESTACESSOATIVIDADEACAO.CODACAO = estatividadeacao.CODACAO
AND ESTACESSOATIVIDADEACAO.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
FROM estatividadeacao`;
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const modules = await queryRunner.query(sqlModules);
const atividades = await queryRunner.query(sqlAtividade);
const actions = await queryRunner.query(sqlAction);
console.log("acoes:" + JSON.stringify(actions));
console.log("atividaes:" + JSON.stringify(atividades));
const arrayAtividade = [];
atividades.map((atividade) => {
const data = {
...atividade, items: [...actions.filter((a) => a.moduloId == atividade.moduloId
&& a.processId == atividade.processId &&
a.atividadeId == atividade.id)]
}
arrayAtividade.push(data);
});
console.log("atividade acao: " + JSON.stringify(arrayAtividade));
const arrayModules = [];
modules.map((module) => {
const data = {
...module, items: [...arrayAtividade.filter((a) => a.moduloId == module.id)]
}
arrayModules.push(data);
});
return arrayModules;
} finally {
await queryRunner.release();
await connection.close();
}
}
async updatePermissionUser(userId: number, data: any) {
console.log(JSON.stringify(data));
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
const sqlDeletePermissionUser = `BEGIN
DELETE FROM ESTACESSOMODULO WHERE CODUSUARIO = ${userId};
DELETE FROM ESTACESSOATIVIDADE WHERE CODUSUARIO = ${userId};
DELETE FROM ESTACESSOATIVIDADEACAO WHERE CODUSUARIO = ${userId};
END;
`;
await queryRunner.query(sqlDeletePermissionUser);
for (const action of data.actions) {
const sqlCreatePermissionAction = `BEGIN
UPDATE ESTACESSOATIVIDADEACAO SET
ACESSO = 'S'
WHERE CODMODULO = ${action.moduloId} AND CODPROCESSO = ${action.processId}
AND CODATIVIDADE = ${action.atividadeId} AND CODACAO = ${action.Id} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOATIVIDADEACAO ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODACAO, CODUSUARIO, ACESSO )
VALUES ( ${action.moduloId}, ${action.processId}, ${action.atividadeId}, ${action.Id}, ${userId},'S');
END IF;
UPDATE ESTACESSOATIVIDADE SET
ACESSO = 'S'
WHERE CODMODULO = ${action.moduloId} AND CODPROCESSO = ${action.processId}
AND CODATIVIDADE = ${action.atividadeId} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOATIVIDADE ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODUSUARIO, ACESSO )
VALUES ( ${action.moduloId}, ${action.processId}, ${action.atividadeId}, ${userId},'S');
END IF;
UPDATE ESTACESSOMODULO SET
ACESSO = 'S'
WHERE CODMODULO = ${action.moduloId} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOMODULO ( CODMODULO, CODUSUARIO, ACESSO )
VALUES ( ${action.moduloId}, ${userId}, 'S');
END IF;
END; `
await queryRunner.query(sqlCreatePermissionAction);
}
for (const atividade of data.atividades) {
const sqlCreatePermissionAtividade = `BEGIN
UPDATE ESTACESSOATIVIDADE SET
ACESSO = 'S'
WHERE CODMODULO = ${atividade.moduloId} AND CODPROCESSO = ${atividade.processId}
AND CODATIVIDADE = ${atividade.id} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOATIVIDADE ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODUSUARIO, ACESSO )
VALUES ( ${atividade.moduloId}, ${atividade.processId}, ${atividade.id}, ${userId},'S');
END IF;
UPDATE ESTACESSOMODULO SET
ACESSO = 'S'
WHERE CODMODULO = ${atividade.moduloId} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOMODULO ( CODMODULO, CODUSUARIO, ACESSO )
VALUES ( ${atividade.moduloId}, ${userId},'S');
END IF;
END; `;
await queryRunner.query(sqlCreatePermissionAtividade);
}
await queryRunner.commitTransaction();
} catch (err) {
await queryRunner.rollbackTransaction();
console.log(err);
} finally {
await queryRunner.release();
await connection.close();
}
}
}