maestro-server/server-app

View on GitHub
app/core/services/transforms/accessMergeTransform.js

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
'use strict';

const Access = require('core/entities/accessRole');
const in_maker = require('core/libs/in_maker');

function makeAccess(owner, fielder, access) {
    const {_id} = owner;

    if (!_id)
        return false;

    if(!fielder)
          return {};

    const newId = in_maker(_id);

    return {
        [fielder]: {
            $elemMatch: {
                '_id': newId,
                'role': {$gte: access}
            }
        }
    };
}

module.exports = function (owner, fielder, trans = {}, access = Access.ROLE_READ) {
    let merge = false;

    if (trans.hasOwnProperty('_id')) {
       const {_id} = trans;
       trans._id = in_maker(_id);
    }

    if (Array.isArray(owner)) {
        const roles = owner.map((e) => makeAccess(e, fielder, access));
        merge = {$or: roles};
    } else {
        merge = makeAccess(owner, fielder, access);
    }

    return Object.assign({}, trans, merge);
};

module.exports.makeAccess = makeAccess;