diff --git a/packages/core/content-type-builder/admin/src/permissions.js b/packages/core/content-type-builder/admin/src/constants.js similarity index 84% rename from packages/core/content-type-builder/admin/src/permissions.js rename to packages/core/content-type-builder/admin/src/constants.js index 5d5e1cc557..85e1759a16 100644 --- a/packages/core/content-type-builder/admin/src/permissions.js +++ b/packages/core/content-type-builder/admin/src/constants.js @@ -1,9 +1,7 @@ -const pluginPermissions = { +export const PERMISSIONS = { // This permission regards the main component (App) and is used to tell // If the plugin link should be displayed in the menu // And also if the plugin is accessible. This use case is found when a user types the url of the // plugin directly in the browser main: [{ action: 'plugin::content-type-builder.read', subject: null }], }; - -export default pluginPermissions; diff --git a/packages/core/content-type-builder/admin/src/index.js b/packages/core/content-type-builder/admin/src/index.js index b2bd0f173a..d48bc5f56d 100644 --- a/packages/core/content-type-builder/admin/src/index.js +++ b/packages/core/content-type-builder/admin/src/index.js @@ -3,7 +3,7 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin'; import pluginPkg from '../../package.json'; import PluginIcon from './components/PluginIcon'; -import pluginPermissions from './permissions'; +import { PERMISSIONS } from './constants'; import pluginId from './pluginId'; import reducers from './reducers'; import formsAPI from './utils/formAPI'; @@ -21,7 +21,7 @@ export default { id: `${pluginId}.plugin.name`, defaultMessage: 'Content Types Builder', }, - permissions: pluginPermissions.main, + permissions: PERMISSIONS.main, async Component() { const component = await import( /* webpackChunkName: "content-type-builder" */ './pages/App' diff --git a/packages/core/content-type-builder/admin/src/pages/App/index.js b/packages/core/content-type-builder/admin/src/pages/App/index.js index d8289e205e..86cc549fb1 100644 --- a/packages/core/content-type-builder/admin/src/pages/App/index.js +++ b/packages/core/content-type-builder/admin/src/pages/App/index.js @@ -15,7 +15,7 @@ import { Route, Switch } from 'react-router-dom'; import ContentTypeBuilderNav from '../../components/ContentTypeBuilderNav'; import DataManagerProvider from '../../components/DataManagerProvider'; import FormModalNavigationProvider from '../../components/FormModalNavigationProvider'; -import pluginPermissions from '../../permissions'; +import { PERMISSIONS } from '../../constants'; import pluginId from '../../pluginId'; import RecursivePath from '../RecursivePath'; @@ -39,7 +39,7 @@ const App = () => { }, []); return ( - + diff --git a/packages/core/email/admin/src/permissions.js b/packages/core/email/admin/src/constants.js similarity index 84% rename from packages/core/email/admin/src/permissions.js rename to packages/core/email/admin/src/constants.js index 1ec296091b..a4b7e76629 100644 --- a/packages/core/email/admin/src/permissions.js +++ b/packages/core/email/admin/src/constants.js @@ -1,9 +1,7 @@ -const pluginPermissions = { +export const PERMISSIONS = { // This permission regards the main component (App) and is used to tell // If the plugin link should be displayed in the menu // And also if the plugin is accessible. This use case is found when a user types the url of the // plugin directly in the browser settings: [{ action: 'plugin::email.settings.read', subject: null }], }; - -export default pluginPermissions; diff --git a/packages/core/email/admin/src/index.js b/packages/core/email/admin/src/index.js index eac130f8a8..ca1537ae25 100644 --- a/packages/core/email/admin/src/index.js +++ b/packages/core/email/admin/src/index.js @@ -9,7 +9,7 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin'; import pluginPkg from '../../package.json'; -import pluginPermissions from './permissions'; +import { PERMISSIONS } from './constants'; import pluginId from './pluginId'; import getTrad from './utils/getTrad'; @@ -38,7 +38,7 @@ export default { return component; }, - permissions: pluginPermissions.settings, + permissions: PERMISSIONS.settings, }, ] ); diff --git a/packages/core/email/admin/src/pages/Settings/index.js b/packages/core/email/admin/src/pages/Settings/index.js index d31b3e5391..cbcc205bc5 100644 --- a/packages/core/email/admin/src/pages/Settings/index.js +++ b/packages/core/email/admin/src/pages/Settings/index.js @@ -23,7 +23,7 @@ import { import { Envelop } from '@strapi/icons'; import { useIntl } from 'react-intl'; -import pluginPermissions from '../../permissions'; +import { PERMISSIONS } from '../../constants'; import getTrad from '../../utils/getTrad'; import schema from '../../utils/schema'; @@ -32,7 +32,7 @@ import EmailHeader from './components/EmailHeader'; import { fetchEmailSettings, postEmailTest } from './utils/api'; const ProtectedSettingsPage = () => ( - + ); diff --git a/packages/core/upload/admin/src/constants.js b/packages/core/upload/admin/src/constants.js index d281ac9a74..0143624087 100644 --- a/packages/core/upload/admin/src/constants.js +++ b/packages/core/upload/admin/src/constants.js @@ -174,3 +174,43 @@ export const localStorageKeys = { modalView: `STRAPI_UPLOAD_MODAL_VIEW`, view: `STRAPI_UPLOAD_LIBRARY_VIEW`, }; + +export const PERMISSIONS = { + // This permission regards the main component (App) and is used to tell + // If the plugin link should be displayed in the menu + // And also if the plugin is accessible. This use case is found when a user types the url of the + // plugin directly in the browser + main: [ + { action: 'plugin::upload.read', subject: null }, + { + action: 'plugin::upload.assets.create', + subject: null, + }, + { + action: 'plugin::upload.assets.update', + subject: null, + }, + ], + copyLink: [ + { + action: 'plugin::upload.assets.copy-link', + subject: null, + }, + ], + create: [ + { + action: 'plugin::upload.assets.create', + subject: null, + }, + ], + download: [ + { + action: 'plugin::upload.assets.download', + subject: null, + }, + ], + read: [{ action: 'plugin::upload.read', subject: null }], + configureView: [{ action: 'plugin::upload.configure-view', subject: null }], + settings: [{ action: 'plugin::upload.settings.read', subject: null }], + update: [{ action: 'plugin::upload.assets.update', subject: null, fields: null }], +}; diff --git a/packages/core/upload/admin/src/hooks/useMediaLibraryPermissions.js b/packages/core/upload/admin/src/hooks/useMediaLibraryPermissions.js index 8a3acb2e24..1b17e4205b 100644 --- a/packages/core/upload/admin/src/hooks/useMediaLibraryPermissions.js +++ b/packages/core/upload/admin/src/hooks/useMediaLibraryPermissions.js @@ -3,10 +3,10 @@ import { useMemo } from 'react'; import { useRBAC } from '@strapi/helper-plugin'; import omit from 'lodash/omit'; -import pluginPermissions from '../permissions'; +import { PERMISSIONS } from '../constants'; export const useMediaLibraryPermissions = () => { - const permissions = useMemo(() => omit(pluginPermissions, 'main'), []); + const permissions = useMemo(() => omit(PERMISSIONS, 'main'), []); const { allowedActions, isLoading } = useRBAC(permissions); return { ...allowedActions, isLoading }; diff --git a/packages/core/upload/admin/src/index.js b/packages/core/upload/admin/src/index.js index 38de6efbb3..5c54a2b8ff 100644 --- a/packages/core/upload/admin/src/index.js +++ b/packages/core/upload/admin/src/index.js @@ -11,7 +11,7 @@ import pluginPkg from '../../package.json'; import { MediaLibraryDialog } from './components/MediaLibraryDialog'; import { MediaLibraryInput } from './components/MediaLibraryInput'; import PluginIcon from './components/PluginIcon'; -import pluginPermissions from './permissions'; +import { PERMISSIONS } from './constants'; import pluginId from './pluginId'; import getTrad from './utils/getTrad'; @@ -26,7 +26,7 @@ export default { id: `${pluginId}.plugin.name`, defaultMessage: 'Media Library', }, - permissions: pluginPermissions.main, + permissions: PERMISSIONS.main, async Component() { const component = await import(/* webpackChunkName: "upload" */ './pages/App'); @@ -57,7 +57,7 @@ export default { return component; }, - permissions: pluginPermissions.settings, + permissions: PERMISSIONS.settings, }); }, async registerTrads({ locales }) { diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/index.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/index.js index 857ecd6d00..001b937efe 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/index.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/index.js @@ -45,12 +45,11 @@ import { PaginationFooter } from '../../../components/PaginationFooter'; import SortPicker from '../../../components/SortPicker'; import { TableList } from '../../../components/TableList'; import { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog'; -import { localStorageKeys, viewOptions } from '../../../constants'; +import { localStorageKeys, PERMISSIONS, viewOptions } from '../../../constants'; import { useAssets } from '../../../hooks/useAssets'; import { useFolder } from '../../../hooks/useFolder'; import { useFolders } from '../../../hooks/useFolders'; import { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions'; -import pluginPermissions from '../../../permissions'; import { containsAssetFilter, getBreadcrumbDataML, getFolderURL, getTrad } from '../../../utils'; import { BulkActions } from './components/BulkActions'; @@ -257,7 +256,7 @@ export const MediaLibrary = () => { } endActions={ <> - + { }; const ProtectedSettingsPage = () => ( - + ); diff --git a/packages/core/upload/admin/src/permissions.js b/packages/core/upload/admin/src/permissions.js deleted file mode 100644 index 535a032e1d..0000000000 --- a/packages/core/upload/admin/src/permissions.js +++ /dev/null @@ -1,41 +0,0 @@ -const pluginPermissions = { - // This permission regards the main component (App) and is used to tell - // If the plugin link should be displayed in the menu - // And also if the plugin is accessible. This use case is found when a user types the url of the - // plugin directly in the browser - main: [ - { action: 'plugin::upload.read', subject: null }, - { - action: 'plugin::upload.assets.create', - subject: null, - }, - { - action: 'plugin::upload.assets.update', - subject: null, - }, - ], - copyLink: [ - { - action: 'plugin::upload.assets.copy-link', - subject: null, - }, - ], - create: [ - { - action: 'plugin::upload.assets.create', - subject: null, - }, - ], - download: [ - { - action: 'plugin::upload.assets.download', - subject: null, - }, - ], - read: [{ action: 'plugin::upload.read', subject: null }], - configureView: [{ action: 'plugin::upload.configure-view', subject: null }], - settings: [{ action: 'plugin::upload.settings.read', subject: null }], - update: [{ action: 'plugin::upload.assets.update', subject: null, fields: null }], -}; - -export default pluginPermissions; diff --git a/packages/plugins/documentation/admin/src/permissions.js b/packages/plugins/documentation/admin/src/constants.js similarity index 92% rename from packages/plugins/documentation/admin/src/permissions.js rename to packages/plugins/documentation/admin/src/constants.js index ee866d8503..fb07ff7067 100644 --- a/packages/plugins/documentation/admin/src/permissions.js +++ b/packages/plugins/documentation/admin/src/constants.js @@ -1,4 +1,4 @@ -const pluginPermissions = { +export const PERMISSIONS = { // This permission regards the main component (App) and is used to tell // If the plugin link should be displayed in the menu // And also if the plugin is accessible. This use case is found when a user types the url of the @@ -15,5 +15,3 @@ const pluginPermissions = { regenerate: [{ action: 'plugin::documentation.settings.regenerate', subject: null }], update: [{ action: 'plugin::documentation.settings.update', subject: null }], }; - -export default pluginPermissions; diff --git a/packages/plugins/documentation/admin/src/index.js b/packages/plugins/documentation/admin/src/index.js index c2f6680ec8..3219922a1a 100644 --- a/packages/plugins/documentation/admin/src/index.js +++ b/packages/plugins/documentation/admin/src/index.js @@ -9,7 +9,7 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin'; import pluginPkg from '../../package.json'; import PluginIcon from './components/PluginIcon'; -import pluginPermissions from './permissions'; +import { PERMISSIONS } from './constants'; import pluginId from './pluginId'; const name = pluginPkg.strapi.name; @@ -23,7 +23,7 @@ export default { id: `${pluginId}.plugin.name`, defaultMessage: 'Documentation', }, - permissions: pluginPermissions.main, + permissions: PERMISSIONS.main, async Component() { const component = await import( /* webpackChunkName: "documentation-page" */ './pages/PluginPage' @@ -53,7 +53,7 @@ export default { return component; }, - permissions: pluginPermissions.main, + permissions: PERMISSIONS.main, }); }, async registerTrads({ locales }) { diff --git a/packages/plugins/documentation/admin/src/pages/PluginPage/index.js b/packages/plugins/documentation/admin/src/pages/PluginPage/index.js index 82cdd17e83..4c1068af48 100755 --- a/packages/plugins/documentation/admin/src/pages/PluginPage/index.js +++ b/packages/plugins/documentation/admin/src/pages/PluginPage/index.js @@ -37,7 +37,7 @@ import { Eye as Show, Refresh as Reload, Trash } from '@strapi/icons'; import { Helmet } from 'react-helmet'; import { useIntl } from 'react-intl'; -import permissions from '../../permissions'; +import { PERMISSIONS } from '../../constants'; import { getTrad } from '../../utils'; import openWithNewTab from '../../utils/openWithNewTab'; import useReactQuery from '../utils/useReactQuery'; @@ -107,7 +107,7 @@ const PluginPage = () => { })} primaryAction={ // eslint-disable-next-line - +