From 50fba6b0a3c7d8643fbb9d5b91f0309aed2777a7 Mon Sep 17 00:00:00 2001 From: SachaG <358832+SachaG@users.noreply.github.com> Date: Fri, 22 Jun 2018 20:55:22 +0900 Subject: [PATCH] viewableBy -> canRead --- .../lib/modules/custom_fields.js | 6 ++-- .../lib/modules/callbacks/schema.js | 24 ++++++------- .../lib/modules/settings/schema.js | 10 +++--- .../lib/modules/schema.js | 6 ++-- packages/vulcan-forms-upload/README.md | 4 +-- .../lib/components/FormWrapper.jsx | 26 ++++++++++---- packages/vulcan-lib/lib/modules/fragments.js | 3 +- packages/vulcan-lib/lib/modules/graphql.js | 3 +- .../lib/modules/custom_fields.js | 2 +- .../lib/modules/charges/schema.js | 36 +++++++++---------- packages/vulcan-users/lib/modules/schema.js | 30 ++++++++-------- .../lib/modules/custom_fields.js | 2 +- .../lib/modules/make_voteable.js | 10 +++--- .../vulcan-voting/lib/modules/votes/schema.js | 14 ++++---- 14 files changed, 96 insertions(+), 80 deletions(-) diff --git a/packages/vulcan-cloudinary/lib/modules/custom_fields.js b/packages/vulcan-cloudinary/lib/modules/custom_fields.js index bc0494a1b..2f334b71c 100644 --- a/packages/vulcan-cloudinary/lib/modules/custom_fields.js +++ b/packages/vulcan-cloudinary/lib/modules/custom_fields.js @@ -10,7 +10,7 @@ export const addCustomFields = collection => { fieldSchema: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], } }, { @@ -18,7 +18,7 @@ export const addCustomFields = collection => { fieldSchema: { type: Array, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], } }, { @@ -36,7 +36,7 @@ export const addCustomFields = collection => { fieldSchema: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], resolveAs: { type: 'String', arguments: 'format: String', diff --git a/packages/vulcan-debug/lib/modules/callbacks/schema.js b/packages/vulcan-debug/lib/modules/callbacks/schema.js index 4d69ee0b2..82dd817ea 100644 --- a/packages/vulcan-debug/lib/modules/callbacks/schema.js +++ b/packages/vulcan-debug/lib/modules/callbacks/schema.js @@ -3,66 +3,66 @@ import { Callbacks } from 'meteor/vulcan:lib'; const schema = { name: { type: String, - viewableBy: ['admins'], + canRead: ['admins'], }, iterator: { type: Object, - viewableBy: ['admins'], + canRead: ['admins'], }, properties: { type: Array, - viewableBy: ['admins'], + canRead: ['admins'], }, 'properties.$': { type: Object, - viewableBy: ['admins'], + canRead: ['admins'], }, // iterator: { // label: 'Iterator', // type: String, - // viewableBy: ['admins'], + // canRead: ['admins'], // }, // options: { // label: 'Options', // type: Array, - // viewableBy: ['admins'], + // canRead: ['admins'], // }, // 'options.$': { // type: Object, - // viewableBy: ['admins'], + // canRead: ['admins'], // }, runs: { type: String, - viewableBy: ['admins'], + canRead: ['admins'], }, newSyntax: { label: 'New Syntax', type: Boolean, - viewableBy: ['admins'], + canRead: ['admins'], }, returns: { label: 'Should Return', type: String, - viewableBy: ['admins'], + canRead: ['admins'], }, description: { type: String, - viewableBy: ['admins'], + canRead: ['admins'], }, hooks: { type: Array, - viewableBy: ['admins'], + canRead: ['admins'], resolveAs: { type: '[String]', resolver: callback => { diff --git a/packages/vulcan-debug/lib/modules/settings/schema.js b/packages/vulcan-debug/lib/modules/settings/schema.js index 4d3b95abf..0eb69fb22 100644 --- a/packages/vulcan-debug/lib/modules/settings/schema.js +++ b/packages/vulcan-debug/lib/modules/settings/schema.js @@ -3,31 +3,31 @@ const schema = { name: { label: 'Name', type: String, - viewableBy: ['admins'], + canRead: ['admins'], }, value: { label: 'Value', type: Object, - viewableBy: ['admins'], + canRead: ['admins'], }, defaultValue: { label: 'Default Value', type: Object, - viewableBy: ['admins'], + canRead: ['admins'], }, isPublic: { label: 'Public', type: Boolean, - viewableBy: ['admins'], + canRead: ['admins'], }, description: { label: 'Description', type: String, - viewableBy: ['admins'], + canRead: ['admins'], }, }; diff --git a/packages/vulcan-events-internal/lib/modules/schema.js b/packages/vulcan-events-internal/lib/modules/schema.js index 0da6fdd86..7bec2873e 100644 --- a/packages/vulcan-events-internal/lib/modules/schema.js +++ b/packages/vulcan-events-internal/lib/modules/schema.js @@ -1,7 +1,7 @@ const schema = { createdAt: { type: Date, - viewableBy: ['guests'], + canRead: ['guests'], optional: true, onInsert: () => { return new Date() @@ -9,7 +9,7 @@ const schema = { }, name: { type: String, - viewableBy: ['guests'], + canRead: ['guests'], insertableBy: ['guests'], }, userId: { @@ -33,7 +33,7 @@ const schema = { type: Object, optional: true, blackbox: true, - viewableBy: ['guests'], + canRead: ['guests'], insertableBy: ['guests'], }, }; diff --git a/packages/vulcan-forms-upload/README.md b/packages/vulcan-forms-upload/README.md index 7a2361c70..b952cfe80 100755 --- a/packages/vulcan-forms-upload/README.md +++ b/packages/vulcan-forms-upload/README.md @@ -87,7 +87,7 @@ Posts.addField({ control: getComponent('Upload'), insertableBy: ['members'], editableBy: ['members'], - viewableBy: ['guests'], + canRead: ['guests'], form: { options: { preset: getSetting('cloudinaryPresets').posts // this setting refers to the transformation you want to apply to the image @@ -113,7 +113,7 @@ Users.addField({ control: getComponent('Upload'), insertableBy: ['members'], editableBy: ['members'], - viewableBy: ['guests'], + canRead: ['guests'], preload: true, // ⚠️ will preload the field for the current user! form: { options: { diff --git a/packages/vulcan-forms/lib/components/FormWrapper.jsx b/packages/vulcan-forms/lib/components/FormWrapper.jsx index 4c8349d6c..00cf8411b 100644 --- a/packages/vulcan-forms/lib/components/FormWrapper.jsx +++ b/packages/vulcan-forms/lib/components/FormWrapper.jsx @@ -68,6 +68,21 @@ class FormWrapper extends PureComponent { return this.props.documentId || this.props.slug ? "edit" : "new"; } + getReadableFields() { + // OpenCRUD backwards compatibility + return Object.keys(this.getSchema()).filter(fieldName => schema[fieldName].canRead || schema[fieldName].viewableBy); + } + + getCreateableFields() { + // OpenCRUD backwards compatibility + return Object.keys(this.getSchema()).filter(fieldName => schema[fieldName].canCreate || schema[fieldName].insertableBy); + } + + getUpdatetableFields() { + // OpenCRUD backwards compatibility + return Object.keys(this.getSchema()).filter(fieldName => schema[fieldName].canUpdate || schema[fieldName].editableBy); + } + // get fragment used to decide what data to load from the server to populate the form, // as well as what data to ask for as return value for the mutation getFragments() { @@ -75,16 +90,15 @@ class FormWrapper extends PureComponent { const prefix = `${this.getCollection()._name}${Utils.capitalize(this.getFormType())}` const fragmentName = `${prefix}FormFragment`; - const schema = this.getSchema(); const fields = this.props.fields; - const viewableFields = _.filter(_.keys(schema), fieldName => !!schema[fieldName].viewableBy); - const insertableFields = _.filter(_.keys(schema), fieldName => !!schema[fieldName].insertableBy); - const editableFields = _.filter(_.keys(schema), fieldName => !!schema[fieldName].editableBy); + const readableFields = this.getReadableFields(); + const createableFields = this.getCreateableFields(); + const updatetableFields = this.getUpdatetableFields(); // get all editable/insertable fields (depending on current form type) - let queryFields = this.getFormType() === 'new' ? insertableFields : editableFields; + let queryFields = this.getFormType() === 'new' ? createableFields : updatetableFields; // for the mutations's return value, also get non-editable but viewable fields (such as createdAt, userId, etc.) - let mutationFields = this.getFormType() === 'new' ? _.unique(insertableFields.concat(viewableFields)) : _.unique(insertableFields.concat(editableFields)); + let mutationFields = this.getFormType() === 'new' ? _.unique(createableFields.concat(readableFields)) : _.unique(createableFields.concat(updatetableFields)); // if "fields" prop is specified, restrict list of fields to it if (typeof fields !== "undefined" && fields.length > 0) { diff --git a/packages/vulcan-lib/lib/modules/fragments.js b/packages/vulcan-lib/lib/modules/fragments.js index 68e6fcff1..aea8f34e0 100644 --- a/packages/vulcan-lib/lib/modules/fragments.js +++ b/packages/vulcan-lib/lib/modules/fragments.js @@ -84,7 +84,8 @@ export const getDefaultFragmentText = (collection, options = { onlyViewable: tru */ const field = schema[fieldName]; - return (field.resolveAs && !field.resolveAs.addOriginalField) || fieldName.indexOf('$') !== -1 || options.onlyViewable && !field.viewableBy + // OpenCRUD backwards compatibility + return (field.resolveAs && !field.resolveAs.addOriginalField) || fieldName.indexOf('$') !== -1 || options.onlyViewable && !(field.canRead || field.viewableBy); }); if (fieldNames.length) { diff --git a/packages/vulcan-lib/lib/modules/graphql.js b/packages/vulcan-lib/lib/modules/graphql.js index 42453ce59..26e45a7c4 100644 --- a/packages/vulcan-lib/lib/modules/graphql.js +++ b/packages/vulcan-lib/lib/modules/graphql.js @@ -140,7 +140,8 @@ export const GraphQLSchema = { // only include fields that are viewable/insertable/editable and don't contain "$" in their name // note: insertable/editable fields must be included in main schema in case they're returned by a mutation - if ((field.viewableBy || field.insertableBy || field.editableBy) && fieldName.indexOf('$') === -1) { + // OpenCRUD backwards compatibility + if ((field.canRead || field.canCreate || field.canUpdate || field.viewableBy || field.insertableBy || field.editableBy) && fieldName.indexOf('$') === -1) { const fieldDescription = field.description; const fieldDirective = isIntlField(field) ? `@intl` : ''; diff --git a/packages/vulcan-newsletter/lib/modules/custom_fields.js b/packages/vulcan-newsletter/lib/modules/custom_fields.js index c2c120316..caf8b5d5d 100644 --- a/packages/vulcan-newsletter/lib/modules/custom_fields.js +++ b/packages/vulcan-newsletter/lib/modules/custom_fields.js @@ -10,7 +10,7 @@ Users.addField([ defaultValue: false, insertableBy: ['members'], editableBy: ['members'], - viewableBy: ['guests'], + canRead: ['guests'], control: 'NewsletterSubscribe', group: { name: "newsletter", diff --git a/packages/vulcan-payments/lib/modules/charges/schema.js b/packages/vulcan-payments/lib/modules/charges/schema.js index 1f5e73125..47e95e465 100644 --- a/packages/vulcan-payments/lib/modules/charges/schema.js +++ b/packages/vulcan-payments/lib/modules/charges/schema.js @@ -7,12 +7,12 @@ const schema = { _id: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], }, createdAt: { type: Date, optional: true, - viewableBy: ['admins'], + canRead: ['admins'], onInsert: (document, currentUser) => { return new Date(); }, @@ -20,7 +20,7 @@ const schema = { userId: { type: String, optional: true, - viewableBy: ['admins'], + canRead: ['admins'], resolveAs: { fieldName: 'user', type: 'User', @@ -34,20 +34,20 @@ const schema = { type: { type: String, optional: true, - viewableBy: ['admins'], + canRead: ['admins'], }, // custom properties associatedCollection: { type: String, - viewableBy: ['admins'], + canRead: ['admins'], optional: true, }, associatedId: { type: String, - viewableBy: ['admins'], + canRead: ['admins'], optional: true, }, @@ -58,37 +58,37 @@ const schema = { productKey: { type: String, - viewableBy: ['admins'], + canRead: ['admins'], optional: true, }, source: { type: String, - viewableBy: ['admins'], + canRead: ['admins'], optional: false, }, test: { type: Boolean, - viewableBy: ['admins'], + canRead: ['admins'], optional: true, }, data: { type: Object, - viewableBy: ['admins'], + canRead: ['admins'], blackbox: true, }, properties: { type: Object, - viewableBy: ['admins'], + canRead: ['admins'], blackbox: true, }, ip: { type: String, - viewableBy: ['admins'], + canRead: ['admins'], optional: true, }, @@ -97,7 +97,7 @@ const schema = { amount: { type: Number, optional: true, - viewableBy: ['admins'], + canRead: ['admins'], resolveAs: { type: 'Int', resolver: charge => charge.data.amount, @@ -107,7 +107,7 @@ const schema = { createdAtFormatted: { type: String, optional: true, - viewableBy: ['admins'], + canRead: ['admins'], resolveAs: { type: 'String', resolver: (charge, args, context) => { @@ -119,7 +119,7 @@ const schema = { createdAtFormattedShort: { type: String, optional: true, - viewableBy: ['admins'], + canRead: ['admins'], resolveAs: { type: 'String', resolver: (charge, args, context) => { @@ -131,7 +131,7 @@ const schema = { stripeId: { type: String, optional: true, - viewableBy: ['admins'], + canRead: ['admins'], resolveAs: { type: 'String', resolver: (charge, args, context) => { @@ -143,7 +143,7 @@ const schema = { stripeChargeUrl: { type: String, optional: true, - viewableBy: ['admins'], + canRead: ['admins'], resolveAs: { type: 'String', resolver: (charge, args, context) => { @@ -156,7 +156,7 @@ const schema = { // associatedDocument: { // type: Object, - // viewableBy: ['admins'], + // canRead: ['admins'], // optional: true, // resolveAs: { // type: 'Chargeable', diff --git a/packages/vulcan-users/lib/modules/schema.js b/packages/vulcan-users/lib/modules/schema.js index fda47313b..3db3960d4 100644 --- a/packages/vulcan-users/lib/modules/schema.js +++ b/packages/vulcan-users/lib/modules/schema.js @@ -34,12 +34,12 @@ const schema = { _id: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], }, username: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], insertableBy: ['guests'], onInsert: user => { if (user.services && user.services.twitter && user.services.twitter.screenName) { @@ -68,7 +68,7 @@ const schema = { createdAt: { type: Date, optional: true, - viewableBy: ['admins'], + canRead: ['admins'], onInsert: () => { return new Date(); } @@ -80,7 +80,7 @@ const schema = { optional: true, insertableBy: ['admins'], editableBy: ['admins'], - viewableBy: ['guests'], + canRead: ['guests'], group: adminGroup, }, locale: { @@ -90,7 +90,7 @@ const schema = { control: 'select', insertableBy: ['members'], editableBy: ['members'], - viewableBy: ['guests'], + canRead: ['guests'], options: () => Locales.map(({ id, label }) => ({ value: id, label })), }, profile: { @@ -109,7 +109,7 @@ const schema = { type: Object, optional: true, blackbox: true, - viewableBy: ownsOrIsAdmin, + canRead: ownsOrIsAdmin, }, /** The name displayed throughout the app. Can contain spaces and special characters, doesn't need to be unique @@ -120,7 +120,7 @@ const schema = { control: "text", insertableBy: ['members'], editableBy: ['members'], - viewableBy: ['guests'], + canRead: ['guests'], order: 10, onInsert: (user, options) => { const profileName = Utils.getNestedProperty(user, 'profile.name'); @@ -145,7 +145,7 @@ const schema = { control: "text", insertableBy: ['guests'], editableBy: ['members'], - viewableBy: ownsOrIsAdmin, + canRead: ownsOrIsAdmin, order: 20, onInsert: (user) => { // look in a few places for the user email @@ -171,7 +171,7 @@ const schema = { emailHash: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], onInsert: user => { if (user.email) { return getCollection('Users').avatar.hash(user.email); @@ -181,7 +181,7 @@ const schema = { avatarUrl: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], onInsert: user => { const twitterAvatar = Utils.getNestedProperty(user, 'services.twitter.profile_image_url_https'); @@ -217,7 +217,7 @@ const schema = { slug: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], order: 40, onInsert: user => { // create a basic slug from display name and then modify it if this slugs already exists; @@ -234,7 +234,7 @@ const schema = { control: "text", insertableBy: ['members'], editableBy: ['members'], - viewableBy: ['guests'], + canRead: ['guests'], order: 60, resolveAs: { type: 'String', @@ -257,7 +257,7 @@ const schema = { control: "checkboxgroup", insertableBy: ['admins'], editableBy: ['admins'], - viewableBy: ['guests'], + canRead: ['guests'], group: adminGroup, form: { options: function () { @@ -276,7 +276,7 @@ const schema = { pageUrl: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], resolveAs: { type: 'String', resolver: (user, args, { Users }) => { @@ -288,7 +288,7 @@ const schema = { editUrl: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], resolveAs: { type: 'String', resolver: (user, args, { Users }) => { diff --git a/packages/vulcan-voting/lib/modules/custom_fields.js b/packages/vulcan-voting/lib/modules/custom_fields.js index f759d8c48..510b3ce63 100644 --- a/packages/vulcan-voting/lib/modules/custom_fields.js +++ b/packages/vulcan-voting/lib/modules/custom_fields.js @@ -11,7 +11,7 @@ Users.addField([ fieldSchema: { type: Array, optional: true, - viewableBy: Users.owns, + canRead: Users.owns, resolveAs: { type: '[Vote]', arguments: 'collectionName: String', diff --git a/packages/vulcan-voting/lib/modules/make_voteable.js b/packages/vulcan-voting/lib/modules/make_voteable.js index a59d7a235..403858ec9 100644 --- a/packages/vulcan-voting/lib/modules/make_voteable.js +++ b/packages/vulcan-voting/lib/modules/make_voteable.js @@ -15,7 +15,7 @@ export const makeVoteable = collection => { fieldSchema: { type: Array, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], resolveAs: { type: '[Vote]', resolver: async (document, args, { Users, Votes, currentUser }) => { @@ -44,7 +44,7 @@ export const makeVoteable = collection => { fieldSchema: { type: Array, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], resolveAs: { type: '[Vote]', resolver: async (document, args, { Users, Votes, currentUser }) => { @@ -72,7 +72,7 @@ export const makeVoteable = collection => { fieldSchema: { type: Array, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], resolveAs: { type: '[User]', resolver: async (document, args, { currentUser, Users }) => { @@ -105,7 +105,7 @@ export const makeVoteable = collection => { type: Number, optional: true, defaultValue: 0, - viewableBy: ['guests'], + canRead: ['guests'], onInsert: document => { // default to 0 if empty return document.baseScore || 0; @@ -121,7 +121,7 @@ export const makeVoteable = collection => { type: Number, optional: true, defaultValue: 0, - viewableBy: ['guests'], + canRead: ['guests'], onInsert: document => { // default to 0 if empty return document.score || 0; diff --git a/packages/vulcan-voting/lib/modules/votes/schema.js b/packages/vulcan-voting/lib/modules/votes/schema.js index d912aaef6..310348672 100644 --- a/packages/vulcan-voting/lib/modules/votes/schema.js +++ b/packages/vulcan-voting/lib/modules/votes/schema.js @@ -2,7 +2,7 @@ const schema = { _id: { type: String, - viewableBy: ['guests'], + canRead: ['guests'], }, /** @@ -10,7 +10,7 @@ const schema = { */ documentId: { type: String, - viewableBy: ['guests'], + canRead: ['guests'], }, /** @@ -18,7 +18,7 @@ const schema = { */ collectionName: { type: String, - viewableBy: ['guests'], + canRead: ['guests'], }, /** @@ -26,7 +26,7 @@ const schema = { */ userId: { type: String, - viewableBy: ['guests'], + canRead: ['guests'], }, /** @@ -35,7 +35,7 @@ const schema = { voteType: { type: String, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], }, /** @@ -44,7 +44,7 @@ const schema = { power: { type: Number, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], }, /** @@ -53,7 +53,7 @@ const schema = { votedAt: { type: Date, optional: true, - viewableBy: ['guests'], + canRead: ['guests'], } };