grapher/lib/exposure/exposure.js
2016-09-15 09:14:15 +03:00

55 lines
No EOL
1.4 KiB
JavaScript

import createGraph from '../query/lib/createGraph.js';
import recursiveCompose from '../query/lib/recursiveCompose.js';
import recursiveFetch from '../query/lib/recursiveFetch.js';
export default class Exposure {
constructor(collection, firewall) {
this.collection = collection;
this.firewall = firewall;
this.name = `exposure_${collection._name}`;
this.initSecurity();
this.initMethod();
this.initPublication();
}
initPublication() {
const collection = this.collection;
Meteor.publishComposite(this.name, function (body) {
return recursiveCompose(
createGraph(collection, body),
this.userId
);
});
}
initMethod() {
const collection = this.collection;
Meteor.methods({
[this.name](body) {
return recursiveFetch(
createGraph(collection, body),
null,
this.userId
);
}
})
}
initSecurity() {
const collection = this.collection;
const firewall = this.firewall;
if (firewall) {
collection.findSecure = (filters, options, userId) => {
if (userId !== undefined) {
firewall(filters, options, userId);
}
return collection.find(filters, options);
}
}
}
}