module.exports = Self => { /** * Checks if current user has * read privileges over a dms * * @param {Object} ctx - Request context * @param {Interger} id - DmsType id * @return {Boolean} True for user with read privileges */ Self.hasReadRole = async(ctx, id) => { const models = Self.app.models; const dmsType = await models.DmsType.findById(id, { include: { relation: 'readRole' } }); return await hasRole(ctx, dmsType); }; /** * Checks if current user has * write privileges over a dms * * @param {Object} ctx - Request context * @param {Interger} id - DmsType id * @return {Boolean} True for user with write privileges */ Self.hasWriteRole = async(ctx, id) => { const models = Self.app.models; const dmsType = await models.DmsType.findById(id, { include: { relation: 'writeRole' } }); return await hasRole(ctx, dmsType); }; /** * Checks if current user has * read or write privileges * @param {Object} ctx - Context * @param {Object} dmsType - Dms type [read/write] */ async function hasRole(ctx, dmsType) { const models = Self.app.models; const myUserId = ctx.req.accessToken.userId; const readRole = dmsType.readRole() && dmsType.readRole().name; const writeRole = dmsType.writeRole() && dmsType.writeRole().name; const requiredRole = readRole || writeRole; const hasRequiredRole = await models.Account.hasRole(myUserId, requiredRole); const isRoot = await models.Account.hasRole(myUserId, 'root'); if (isRoot || hasRequiredRole) return true; return false; } };