54 lines
1.9 KiB
JavaScript
54 lines
1.9 KiB
JavaScript
|
|
||
|
const UserError = require('vn-loopback/util/user-error');
|
||
|
|
||
|
module.exports = Self => {
|
||
|
require('../methods/account/sync')(Self);
|
||
|
require('../methods/account/sync-by-id')(Self);
|
||
|
require('../methods/account/sync-all')(Self);
|
||
|
require('../methods/account/login')(Self);
|
||
|
require('../methods/account/logout')(Self);
|
||
|
require('../methods/account/change-password')(Self);
|
||
|
require('../methods/account/set-password')(Self);
|
||
|
require('../methods/mail-alias-account/addAlias')(Self);
|
||
|
require('../methods/mail-alias-account/removeAlias')(Self);
|
||
|
|
||
|
/**
|
||
|
* Checks if current user has
|
||
|
* read privileges over a dms
|
||
|
*
|
||
|
* @param {Object} ctx - Request context
|
||
|
* @param {Interger} mailAlias - mailAlias id
|
||
|
* @param {Object} options - Query options
|
||
|
* @return {Boolean} True for user with grant
|
||
|
*/
|
||
|
Self.hasGrant = async function(ctx, mailAlias, options) {
|
||
|
const models = Self.app.models;
|
||
|
const userId = ctx.req.accessToken.userId;
|
||
|
|
||
|
const canEditAlias = await models.ACL.checkAccessAcl(ctx, 'MailAliasAccount', 'canEditAlias', 'WRITE');
|
||
|
if (canEditAlias) return true;
|
||
|
|
||
|
const user = await models.VnUser.findById(userId, {fields: ['hasGrant']}, options);
|
||
|
if (!user.hasGrant)
|
||
|
throw new UserError(`You don't have grant privilege`);
|
||
|
|
||
|
const account = await models.Account.findById(userId, {
|
||
|
fields: ['id'],
|
||
|
include: {
|
||
|
relation: 'aliases',
|
||
|
scope: {
|
||
|
fields: ['mailAlias']
|
||
|
}
|
||
|
}
|
||
|
}, options);
|
||
|
|
||
|
const aliases = account.aliases().map(alias => alias.mailAlias);
|
||
|
|
||
|
const hasAlias = aliases.includes(mailAlias);
|
||
|
if (!hasAlias)
|
||
|
throw new UserError(`You cannot assign/remove an alias that you are not assigned to`);
|
||
|
|
||
|
return true;
|
||
|
};
|
||
|
};
|