Commit dc63cd28 authored by Gabriel Silva Hermida's avatar Gabriel Silva Hermida

Mudanças Gabriel

Signed-off-by: Gabriel Silva Hermida's avatarGabriel Silva Hermida <gash18@inf.ufpr.br>
parent a17c1abd
'use strict';
var app = require('./../../server/server');
var acl_custom = require("../../server/acl_custom");
module.exports = function(Bloco) {
Bloco.observe("before save", function(ctx,next) {
acl_custom.aclSecretarioSetor(["bloco","Bloco"],ctx,next)
if (ctx.options && ctx.options.accessToken && ctx.options.accessToken.userId){
app.models.Usuario.findById(ctx.options.accessToken.userId,(err,user)=>{
user.getRole((err, role) => {
if(role === "secretario_dpto"){
acl_custom.aclSecretarioDpto(["Bloco","bloco"],ctx,next)}
else if(role === "secretario_setor")
acl_custom.aclSecretarioSetor(["bloco","Bloco"],ctx,next)
})
})
}
})
};
};
\ No newline at end of file
......@@ -77,6 +77,12 @@
"principalId": "admin",
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "secretario_dpto",
"permission": "ALLOW",
"property": "*"
}
],
"methods": {}
......
......@@ -9,7 +9,8 @@ module.exports = function(Sala) {
async.waterfall([
function(callback) { // pega os dados do ctx
app.models.Usuario.findById(ctx.options.accessToken.userId,(err,obj)=>{
return callback(err,obj,ctx.instance)
if(!ctx.instance) return callback(err,obj,ctx.currentInstance)//instance para tentar adicionar salas; currentInstance para editar
else return callback(err, obj, ctx.instance)
})
},
function(user,instance,callback) { // pega a role
......@@ -19,43 +20,25 @@ module.exports = function(Sala) {
},
function(user,instance,role,callback) { // verifica a role, se for secretario então pega o secretario
if(role == "secretario_dpto")
if(role == "secretario_dpto"){
user.secretario.get( ( err,obj)=>{
if(obj) return callback(null,user,instance,secretario)
if(obj) return callback(null,user,instance, obj)
return callback( true, {"code":15, "msg":"Secretario não encontrado"})
})
})}
else
return callback(true,{"code":1}) // quer dizer que a role não é de secretario
},
function(user,instance,secretario,callback) { // pega a instancia no banco
app.models.Sala.findById(instance.codigo,(err,obj)=>{
if(obj)
return callback(err,user,instance,secretario,obj)
else
return callback(err,user,instance,secretario,instance)
})
},
function(user,instance,secretario,modelo,callback) { // pega o bloco da instancia
app.models.Bloco.findById(modelo.blocoCod,(err,obj)=>{
if(!obj)
return callback(true,{"code":4,"msg":"Bloco não existe"})
return callback(err,user,instance,secretario,obj)
})
},
function(user,instance,secretario,bloco,callback) { // pega o setor da instancia
app.models.Setor.findById(bloco.setorCod,(err,obj)=>{
if(!obj)
return callback(true,{"code":3,"msg":"Setor não existe"})
return callback(err,user,instance,secretario,obj)
function(user,instance,secretario,callback) { // pega a instancia no banco
app.models.Departamento.find({where: {"_id": instance.ownerId}}, (err,dpto) => {
if(dpto[0])
if(secretario.valor_vinculo === dpto[0].codigo)
return callback(true, {"code": 2})// Pode salvar
else
return callback(true, {"code": 3, "msg": "O valor do vínculo do secretário não é igual ao código do departamento"})
else
return callback(true, {"code": 3, "msg": "Não foi possível encontrar um departamento com o ID passado"})
})
},
function(user,instance,secretario,setor,callback) { // verifica se o setor da instancia é igual a do secretario
if(secretario.vinculo == "setor" )
if (setor.codigo == secretario.valor_vinculo)
return callback(true,{"code":2}) // pode salvar
else
return callback(true,{"code":3,"msg":"O secretário não possui permissao para alterar este modelo"}) // não salva, setor diferentes
}
], function(err,result){
if(err) {
......
......@@ -58,9 +58,9 @@
"foreignKey": ""
},
"reservas": {
"type": "hasMany",
"model": "Reserva",
"foreignKey": "salaCod"
"type": "hasMany",
"model": "Reserva",
"foreignKey": "salaCod"
},
"tipo": {
"type": "belongsTo",
......@@ -124,6 +124,12 @@
"principalId": "$everyone",
"permission": "ALLOW",
"property": "search"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "secretario_dpto",
"permission": "ALLOW"
}
],
"methods": {
......
......@@ -27,6 +27,11 @@
"type": "hasMany",
"model": "Sala",
"foreignKey": "ownerId"
},
"blocos": {
"type": "hasMany",
"model": "Bloco",
"foreignKey": ""
}
},
"acls": [
......
......@@ -75,6 +75,12 @@
"principalId": "comissao",
"permission": "ALLOW",
"property": "*"
},
{
"property": "*",
"principalType": "ROLE",
"principalId": "secretario_dpto",
"permission": "ALLOW"
}
],
"methods": {}
......
......@@ -2,13 +2,13 @@
set -e
#if [ "$1" = 'DEVELOPMENT' ]; then
# if [ "$1" = 'DEVELOPMENT' ]; then
# /usr/local/bin/node /app/bin/automigrate.js
#fi
#
#if [ "$1" = 'PRODUCTION' ]; then
# fi
# if [ "$1" = 'PRODUCTION' ]; then
# /usr/local/bin/node /app/bin/automigrate.js
#fi
# fi
# echo "while true; do sleep 2; done" >> /app/test.sh && chmod +x /app/test.sh
# /bin/bash /app/test.sh
......
......@@ -2,6 +2,70 @@
var app = require('./server');
const async = require('async');
async function aclSecretarioDptoSetor(_model,ctx,next) {
if(!ctx.options || !ctx.options.accessToken || !ctx.options.accessToken.userId)
return next()
async.waterfall([
function(callback) { // pega os dados do ctx
app.models.Usuario.findById(ctx.options.accessToken.userId,(err,obj)=>{
return callback(err,obj,ctx.currentInstance)
})
},
function(user,instance,callback) { // pega a role
user.getRole((err,obj)=>{
return callback(err,user,instance,obj);
})
},
function(user,instance,role,callback) { // verifica a role, se for secretario então pega o secretario
if(role == "secretario_dpto")
user.secretario.get( ( err,obj)=>{
if(obj) return callback(null,user,instance,obj)
return callback( true, {"code":15, "msg":"Secretario não encontrado"})
})
else
return callback(true,{"code":1}) // quer dizer que a role não é de secretario
},
function(user,instance,secretario,callback) { // pega a instancia no banco
app.models[_model[0]].findById(instance[_model[1]],(err,obj)=>{
if(obj)
return callback(err,user,instance,secretario,obj)
else
return callback(null,user,instance,secretario,instance)
})
},
function(user,instance,secretario,modelo,callback) { // pega o setor da instancia
app.models.Setor.findById(modelo.setorCod,(err,obj)=>{
if(!obj)
return callback(true,{"code":3,"msg":"Não pode acessar o setor"})
return callback(err,user,instance,secretario,obj)
})
},
function(user,instance,secretario,setor,callback) { // verifica se o departamento da instancia é igual a do secretario
if (setor.codigo == secretario.valor_vinculo)
return callback(true,{"code":2}) // pode salvar
else
return callback(true,{"code":3,"msg":"O secretário não possui permissao para alterar este modelo"}) // não salva, departamento diferentes
}
], function(err,result){
if(err) {
if(result) {
if(result.code == 3){//não salva
return next(new Error(result.msg))
}
if(result.code == 2 || result.code == 1)
return next()
}
}
return next()
})
}
async function aclSecretarioDpto(_model,ctx,next) {
if(!ctx.options || !ctx.options.accessToken || !ctx.options.accessToken.userId)
return next()
......@@ -29,7 +93,6 @@ async function aclSecretarioDpto(_model,ctx,next) {
function(user,instance,secretario,callback) { // pega a instancia no banco
app.models[_model[0]].findById(instance[_model[1]],(err,obj)=>{
console.log("obj",obj)
if(obj)
return callback(err,user,instance,secretario,obj)
else
......@@ -37,7 +100,6 @@ async function aclSecretarioDpto(_model,ctx,next) {
})
},
function(user,instance,secretario,modelo,callback) { // pega o departamento da instancia
console.log("modelo",modelo)
app.models.Departamento.findById(modelo.departamentoCod,(err,obj)=>{
if(!obj)
return callback(true,{"code":3,"msg":"Departamento não existe"})
......@@ -55,7 +117,6 @@ async function aclSecretarioDpto(_model,ctx,next) {
if(err) {
if(result) {
if(result.code == 3){//não salva
console.log("code 333")
return next(new Error(result.msg))
}
......@@ -64,7 +125,6 @@ async function aclSecretarioDpto(_model,ctx,next) {
return next()
}
}
console.log("como entrei aqui")
return next()
})
......@@ -76,7 +136,7 @@ function aclSecretarioSetor(_model,ctx,next) {
async.waterfall([
function(callback) { // pega os dados do ctx
app.models.Usuario.findById(ctx.options.accessToken.userId,(err,obj)=>{
return callback(err,obj,ctx.instance)
return callback(err,obj,ctx.currentInstance)
})
},
function(user,instance,callback) { // pega a role
......@@ -133,5 +193,6 @@ function aclSecretarioSetor(_model,ctx,next) {
}
module.exports.aclSecretarioDpto = aclSecretarioDpto;
module.exports.aclSecretarioDptoSetor = aclSecretarioDptoSetor;
module.exports.aclSecretarioSetor = aclSecretarioSetor;
module.exports.aclSecretarioDpto = aclSecretarioDpto;
\ No newline at end of file
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