Vulcan/packages/example-permissions/lib/modules/pics/schema.js

99 lines
2 KiB
JavaScript
Raw Normal View History

/*
A SimpleSchema-compatible JSON schema
*/
import FormsUpload from 'meteor/vulcan:forms-upload';
const schema = {
// default properties
_id: {
type: String,
optional: true,
viewableBy: ['guests'],
},
createdAt: {
type: Date,
optional: true,
viewableBy: ['guests'],
onInsert: (document, currentUser) => {
return new Date();
}
},
userId: {
type: String,
optional: true,
viewableBy: ['guests'],
resolveAs: {
fieldName: 'user',
type: 'User',
resolver(pic, args, context) {
return context.Users.findOne({ _id: pic.userId }, { fields: context.Users.getViewableFields(context.currentUser, context.Users) });
},
addOriginalField: true
}
},
// custom properties
imageUrl: {
label: 'Image URL',
type: String,
viewableBy: ['guests'],
insertableBy: ['members'],
editableBy: ['members'],
control: FormsUpload, // use the FormsUpload form component
form: {
options: {
preset: 'vulcanstagram'
},
}
},
body: {
label: 'Body',
type: String,
optional: true,
control: 'textarea', // use a textarea form component
viewableBy: ['guests'],
insertableBy: ['members'],
editableBy: ['members']
},
// GraphQL-only field
commentsCount: {
type: Number,
optional: true,
viewableBy: ['guests'],
hidden: true,
resolveAs: {
fieldName: 'commentsCount',
type: 'Float',
resolver(pic, args, context) {
return context.Comments.find({picId: pic._id, isDeleted: {$ne: true}}).count();
}
}
},
managerId: {
type: String,
optional: true,
viewableBy: ['members'],
editableBy: ['admins'],
insertableBy: ['admins'],
resolveAs: {
fieldName: 'manager',
type: 'User',
resolver(pic, args, context) {
return context.Users.findOne({ _id: pic.managerId }, { fields: context.Users.getViewableFields(context.currentUser, context.Users) });
},
addOriginalField: true
}
},
};
export default schema;