From 356113fbbaf458e363c111dfabfcd87862558d39 Mon Sep 17 00:00:00 2001 From: James Date: Thu, 9 Jul 2020 14:30:29 -0400 Subject: [PATCH] adds admin: { } options to fields, allows for field disabling --- demo/collections/AllFields.js | 9 ++-- demo/collections/Media.js | 9 +++- src/auth/baseAPIKeyFields.js | 8 +++- src/auth/baseFields.js | 12 +++-- .../components/forms/RenderFields/index.js | 5 +- .../forms/field-types/Blocks/index.js | 4 +- src/collections/sanitize.js | 47 ++++++++++++++----- src/mongoose/buildSchema.js | 4 +- 8 files changed, 73 insertions(+), 25 deletions(-) diff --git a/demo/collections/AllFields.js b/demo/collections/AllFields.js index 97d5068c8b..62de3a5a05 100644 --- a/demo/collections/AllFields.js +++ b/demo/collections/AllFields.js @@ -178,7 +178,6 @@ const AllFields = { blocks: [Email, NumberBlock, Quote, CallToAction], localized: true, required: true, - timestamps: true, }, { type: 'relationship', @@ -208,7 +207,9 @@ const AllFields = { name: 'slug', type: 'text', label: 'Slug', - position: 'sidebar', + admin: { + position: 'sidebar', + }, localized: true, unique: true, required: true, @@ -217,7 +218,9 @@ const AllFields = { name: 'checkbox', type: 'checkbox', label: 'Checkbox', - position: 'sidebar', + admin: { + position: 'sidebar', + }, }, ], timestamps: true, diff --git a/demo/collections/Media.js b/demo/collections/Media.js index 2b4d443487..00110c9113 100644 --- a/demo/collections/Media.js +++ b/demo/collections/Media.js @@ -1,4 +1,11 @@ const path = require('path'); +const roles = require('../access/roles'); +const checkRole = require('../access/checkRole'); + +const access = ({ req: { user } }) => { + const result = checkRole(['admin'], user); + return result; +}; module.exports = { slug: 'media', @@ -47,7 +54,7 @@ module.exports = { { name: 'icon', access: { - read: ({ req: { user } }) => Boolean(user), + read: access, }, }, ], diff --git a/src/auth/baseAPIKeyFields.js b/src/auth/baseAPIKeyFields.js index 408f167d65..dccf1a5548 100644 --- a/src/auth/baseAPIKeyFields.js +++ b/src/auth/baseAPIKeyFields.js @@ -3,13 +3,17 @@ module.exports = [ name: 'enableAPIKey', type: 'checkbox', defaultValue: false, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'apiKey', type: 'text', minLength: 24, maxLength: 48, - hidden: 'admin', + admin: { + disable: true, + }, }, ]; diff --git a/src/auth/baseFields.js b/src/auth/baseFields.js index 24397e6da7..a0f58c256b 100644 --- a/src/auth/baseFields.js +++ b/src/auth/baseFields.js @@ -6,16 +6,22 @@ module.exports = [ label: 'Email', type: 'email', validate: validations.email, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'resetPasswordToken', type: 'text', - hidden: true, + admin: { + disable: true, + }, }, { name: 'resetPasswordExpiration', type: 'date', - hidden: true, + admin: { + disable: true, + }, }, ]; diff --git a/src/client/components/forms/RenderFields/index.js b/src/client/components/forms/RenderFields/index.js index de9e679dc4..679446dc30 100644 --- a/src/client/components/forms/RenderFields/index.js +++ b/src/client/components/forms/RenderFields/index.js @@ -29,9 +29,9 @@ const RenderFields = (props) => { return ( {fieldSchema.map((field, i) => { - if (field?.hidden !== 'api' && field?.hidden !== true) { + if (!field?.hidden && field?.admin?.disabled !== true) { if ((filter && typeof filter === 'function' && filter(field)) || !filter) { - const FieldComponent = field?.hidden === 'admin' ? fieldTypes.hidden : fieldTypes[field.type]; + const FieldComponent = field?.admin?.hidden ? fieldTypes.hidden : fieldTypes[field.type]; let initialFieldData; let fieldPermissions = permissions[field.name]; @@ -118,6 +118,7 @@ RenderFields.propTypes = { filter: PropTypes.func, permissions: PropTypes.shape({}), readOnly: PropTypes.bool, + operation: PropTypes.string, }; export default RenderFields; diff --git a/src/client/components/forms/field-types/Blocks/index.js b/src/client/components/forms/field-types/Blocks/index.js index ab3cc80d91..4d2d1ede8b 100644 --- a/src/client/components/forms/field-types/Blocks/index.js +++ b/src/client/components/forms/field-types/Blocks/index.js @@ -178,7 +178,9 @@ const Blocks = (props) => { { name: 'blockType', type: 'text', - hidden: 'admin', + admin: { + hidden: true, + }, }, ]} /> diff --git a/src/collections/sanitize.js b/src/collections/sanitize.js index c03f1fbd12..962bbc22b1 100644 --- a/src/collections/sanitize.js +++ b/src/collections/sanitize.js @@ -95,19 +95,25 @@ const sanitizeCollection = (collections, collection) => { required: true, unique: true, readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'mimeType', label: 'MIME Type', type: 'text', readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'filesize', label: 'File Size', type: 'number', readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, ]; @@ -118,54 +124,73 @@ const sanitizeCollection = (collections, collection) => { label: 'Width', type: 'number', readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'height', label: 'Height', type: 'number', readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'sizes', label: 'Sizes', type: 'group', - hidden: 'admin', + admin: { + disable: true, + }, fields: collection.upload.imageSizes.map((size) => ({ label: size.name, name: size.name, type: 'group', + admin: { + disable: true, + }, fields: [ { name: 'width', label: 'Width', type: 'number', readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'height', label: 'Height', type: 'number', readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'mimeType', label: 'MIME Type', type: 'text', readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'filesize', label: 'File Size', type: 'number', readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, { name: 'filename', label: 'File Name', type: 'text', readOnly: true, - hidden: 'admin', + admin: { + disable: true, + }, }, ], })), diff --git a/src/mongoose/buildSchema.js b/src/mongoose/buildSchema.js index 636e0f58e1..7a58cc0c5c 100644 --- a/src/mongoose/buildSchema.js +++ b/src/mongoose/buildSchema.js @@ -6,10 +6,10 @@ const formatBaseSchema = (field) => { const createPolicy = field.access && field.access.create; return { - hide: field.hidden === 'api' || field.hidden === true, + hide: field.hidden, localized: field.localized || false, unique: field.unique || false, - required: (field.required && !field.localized && !field.hidden && !field.condition && !createPolicy) || false, + required: (field.required && !field.localized && !field.condition && !createPolicy) || false, default: field.defaultValue || undefined, }; };