262 lines
12 KiB
TypeScript
262 lines
12 KiB
TypeScript
/*
|
|
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();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|