Commit 02174720 authored by ramiro's avatar ramiro

middlware version inicial

parent 9ce93d3d
......@@ -12,6 +12,8 @@ const genFecha = moment().tz('America/La_Paz');
const jwt = require("jwt-simple");
const helmet = require('helmet');
//permisos
const permisos = require('./permisos')
module.exports = app => {
......@@ -46,7 +48,6 @@ module.exports = app => {
// Para poder subir archivos.
app.use(fileupload());
// Permite la visualizacion de los test, en entornos distintos a produccion.
app.use((req, res, next) => {
res.locals.showTests = app.get('env') !== 'production' &&
......@@ -286,7 +287,8 @@ module.exports = app => {
});
}
//permisos middleware
app.use(permisos);
......
const permisos = require('./permisos_apis');
function obtenerPermiso(ruta, rolesUsuario, verboHttp) {
let respu = false;
for(let rolUsuario of rolesUsuario) {
if (permisos[ruta] === undefined || permisos[ruta][rolUsuario] === undefined) {
respu = !respu;
break;
}
}
if(respu) return !respu;
let respu2 = false;
for (let rolUsuario of rolesUsuario) {
if (permisos[ruta][rolUsuario].indexOf(verboHttp) === -1) {
respu2 = true;
break;
}
}
return !respu2;
}
function verificarPermiso (rolUsuario, rutaParam, verboHttp) {
try {
const ruta = rutaParam;
ruta = (ruta.split('?'))[0];
const posiblesLlaves = Object.keys(permisos).filter(el => el.startsWith(ruta));
console.log('------posiblesLlaves ', posiblesLlaves);
if (posiblesLlaves.length === 1 && posiblesLlaves[0] === ruta) {
return obtenerPermiso(posiblesLlaves[0], rolUsuario, verboHttp);
}
return obtenerPermiso(posiblesResultados[0], rolUsuario, verboHttp);
} catch (error) {
console.log('--- erro ', error);
return error;
}
}
module.exports = (req, res, next) => {
console.log('----- req.body ', req.body);
console.log('----- req.path ', req.path);
console.log('----- req.method ', req.method);
if (req.path === '/autenticar') return next();
return Promise.resolve()
.then(() => verificarPermiso(req.body.audit_usuario.roles, req.path, req.method))
.then((tienePermiso) => {
if (!tienePermiso) {
throw new Error('El usuario no tiene los permisos necesarios para realizar la acción');
}
next();
})
.catch((err) => {
next(err);
});
};
\ No newline at end of file
const permisos = {
'/usuarios': {
ADMINISTRADOR: ['POST', 'GET', 'PATCH'],
'/api/v1/plantillasFormly/plantilla_formly/': {
ADMIN: ['POST', 'GET']
},
'/accesos': {
ADMINISTRADOR: ['PATCH'],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment