Changeset View
Changeset View
Standalone View
Standalone View
lib/app/base-chips/access-strategy-types/and.js
"use strict"; | |||||
const locreq = require("locreq")(__dirname); | const locreq = require("locreq")(__dirname); | ||||
const Promise = require("bluebird"); | const Promise = require("bluebird"); | ||||
const AccessStrategy = locreq("lib/chip-types/access-strategy.js"); | const AccessStrategy = locreq("lib/chip-types/access-strategy.js"); | ||||
const Query = require("../../../datastore/query.js"); | const Query = require("../../../datastore/query.js"); | ||||
function parse_params(app, params) { | function parse_params(app, params) { | ||||
return Object.keys(params).map(i => new AccessStrategy(app, params[i])); | return Object.keys(params).map(i => new AccessStrategy(app, params[i])); | ||||
} | } | ||||
module.exports = function(app) { | module.exports = function(app) { | ||||
const and = { | const and = { | ||||
name: "and", | name: "and", | ||||
getRestrictingQuery: async function(context, params) { | async getRestrictingQuery(context, params) { | ||||
const access_strategies = parse_params(app, params); | const access_strategies = parse_params(app, params); | ||||
const queries = await Promise.map(access_strategies, strategy => | const queries = await Promise.map(access_strategies, strategy => | ||||
strategy.getRestrictingQuery(context) | strategy.getRestrictingQuery(context) | ||||
); | ); | ||||
return new Query.And(...queries); | return new Query.And(...queries); | ||||
}, | }, | ||||
item_sensitive: function(params) { | item_sensitive(params) { | ||||
const access_strategies = parse_params(app, params); | const access_strategies = parse_params(app, params); | ||||
return Promise.map(access_strategies, function(access_strategy) { | return Promise.map(access_strategies, access_strategy => | ||||
return access_strategy.is_item_sensitive(); | access_strategy.is_item_sensitive() | ||||
}).reduce((a, b) => a || b); | ).reduce((a, b) => a || b); | ||||
}, | }, | ||||
checker_function: function(context, params, item) { | checker_function(context, params, item) { | ||||
return and.item_sensitive(params).then(function(item_sensitive) { | return and.item_sensitive(params).then(item_sensitive => { | ||||
if (item_sensitive && item === undefined) { | if (item_sensitive && item === undefined) { | ||||
return undefined; | return undefined; | ||||
} else { | } | ||||
const access_strategies = parse_params(app, params); | const access_strategies = parse_params(app, params); | ||||
const results = access_strategies.map(function(strategy) { | const results = access_strategies.map(strategy => | ||||
return strategy.check(context, item); | strategy.check(context, item) | ||||
}); | ); | ||||
return Promise.all(results); | return Promise.all(results); | ||||
} | |||||
}); | }); | ||||
}, | }, | ||||
}; | }; | ||||
return and; | return and; | ||||
}; | }; |