Vulcan/packages/vulcan-users/lib/modules/mutations.js
2018-02-18 15:26:59 +09:00

90 lines
2.2 KiB
JavaScript

import { newMutation, editMutation, removeMutation, Utils, Connectors, getSetting } from 'meteor/vulcan:lib';
import Users from './collection'; // circular dependency?
const database = getSetting('database', 'mongo');
const performCheck = (mutation, user, document) => {
if (!mutation.check(user, document)) throw new Error(Utils.encodeIntlError({id: `app.mutation_not_allowed`, value: `"${mutation.name}" on _id "${document._id}"`}));
};
const mutations = {
new: {
name: 'usersNew',
check(user, document) {
if (!user) return false;
return Users.canDo(user, 'users.new');
},
mutation(root, {document}, context) {
performCheck(this, context.currentUser, document);
return newMutation({
collection: context.Users,
document: document,
currentUser: context.currentUser,
validate: true,
context,
});
},
},
edit: {
name: 'usersEdit',
check(user, document) {
if (!user || !document) return false;
return Users.owns(user, document) ? Users.canDo(user, 'users.edit.own') : Users.canDo(user, `users.edit.all`);
},
async mutation(root, {documentId, set, unset}, context) {
const document = await Connectors[database].get(context.Users, documentId);
performCheck(this, context.currentUser, document);
return editMutation({
collection: context.Users,
documentId: documentId,
set: set,
unset: unset,
currentUser: context.currentUser,
validate: true,
context,
});
},
},
remove: {
name: 'usersRemove',
check(user, document) {
if (!user || !document) return false;
return Users.owns(user, document) ? Users.canDo(user, 'users.remove.own') : Users.canDo(user, `users.remove.all`);
},
async mutation(root, {documentId}, context) {
const document = await Connectors[database].get(context.Users, documentId);
performCheck(this, context.currentUser, document);
return removeMutation({
collection: context.Users,
documentId: documentId,
currentUser: context.currentUser,
validate: true,
context,
});
},
},
};
export default mutations;