refs #6085 aclMail back #1869

Merged
carlossa merged 16 commits from 6085-ACLsMail into dev 2024-01-03 07:56:11 +00:00
2 changed files with 99 additions and 0 deletions
Showing only changes of commit 9a3efdd6fe - Show all commits

View File

@ -0,0 +1,70 @@
const UserError = require('vn-loopback/util/user-error');
carlossa marked this conversation as resolved Outdated
Outdated
Review

Pq el codi esta duplicat en modules/account/back/models/mail-alias-acl.js i modules/account/back/models/mail-alias-account.js ?

Pq el codi esta duplicat en modules/account/back/models/mail-alias-acl.js i modules/account/back/models/mail-alias-account.js ?
module.exports = Self => {
require('../methods/notification/getList')(Self);
carlossa marked this conversation as resolved Outdated
Outdated
Review

mmmm

mmmm
Self.observe('before save', async function(ctx) {
await checkModifyPermission(ctx);
});
Self.observe('before delete', async function(ctx) {
await checkModifyPermission(ctx);
});
async function checkModifyPermission(ctx) {
carlossa marked this conversation as resolved Outdated
Outdated
Review

Esta part mirala be pq soles has de comprovar el userId del que esta fent el canvi const userId = ctx.options.accessToken.userId;

Esta part mirala be pq soles has de comprovar el userId del que esta fent el canvi const userId = ctx.options.accessToken.userId;

No se usa ese fichero, se usa account, solucionado

No se usa ese fichero, se usa account, solucionado
const models = Self.app.models;
const instance = ctx.instance;
const userId = ctx.options.accessToken.userId;
let mailAliasFk;
let roleFk;
if (instance) {
mailAliasFk = instance.mailAliasFk;
roleFk = instance.roleFk;
} else {
const mailAliasAcl = await models.MailAlias.findById(ctx.where.id);
mailAliasFk = mailAliasAcl.id;
roleFk = mailAliasAcl.roleFk;
}
const role = await models.VnUser.findById(roleFk, {fields: ['id', 'role']});
const available = await Self.getAvailable(roleFk);
const hasAcl = available.has(mailAliasFk);
if (!hasAcl || (userId.role != role))
throw new UserError('The alias cant be modified');
}
Self.getAvailable = async function(userId, options) {
const availableMailAliasMap = new Map();
const models = Self.app.models;
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
const roles = await models.RoleMapping.find({
fields: ['roleId'],
where: {principalId: userId}
}, myOptions);
const availableMailAlias = await models.MailAliasAcl.find({
fields: ['mailAliasFk', 'roleFk'],
include: {relation: 'roleFk'},
where: {
roleFk: {
inq: roles.map(role => role.roleId),
},
}
}, myOptions);
for (available of availableMailAlias) {
availableMailAliasMap.set(available.mailAliasFk, {
mailAliasFk: available.mailAliasFk,
});
}
return availableMailAliasMap;
};
};

View File

@ -0,0 +1,29 @@
{
"name": "mailAliasACL",
"base": "VnModel",
"options": {
"mysql": {
"table": "account.mailAliasACL"
}
},
"properties": {
"mailAliasFk": {
"type": "number"
},
"roleFk": {
"type": "number"
}
},
"relations": {
"mailAlias": {
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "mailAliasFk"
},
"role": {
"type": "belongsTo",
"model": "VnUser",
"foreignKey": "roleFk"
}
}
}