bigbluebutton-Github/bigbluebutton-html5/imports/startup/mapToAcl.js
2017-12-13 16:27:53 -02:00

46 lines
1.2 KiB
JavaScript

import Acl from '/imports/startup/acl';
import { Meteor } from 'meteor/meteor';
const injectAclActionCheck = (name, handler) => (
(...args) => {
const credentials = args[0];
if (!Acl.can(name, credentials)) {
throw new Meteor.Error(
'acl-not-allowed',
`The user can't perform the action "${name}".`,
);
}
return handler(...args);
}
);
const injectAclSubscribeCheck = (name, handler) => (
(...args) => {
const credentials = args[args.length - 1];
if (!Acl.can(name, ...credentials)) {
throw new Meteor.Error(
'acl-not-allowed',
`The user can't perform the subscription "${name}".`,
);
}
return handler(...credentials);
}
);
const mapToAcl = (name, handler) => {
// The Meteor#methods require an object, while the Meteor#subscribe an function.
if (handler instanceof Function) {
return injectAclSubscribeCheck(name, handler);
}
return Object.keys(handler).reduce((previous, current, index) => {
const newPrevious = previous;
newPrevious[current] = injectAclActionCheck(name[index], handler[current]);
return newPrevious;
}, {});
};
export default mapToAcl;