diff --git a/packages/strapi-admin/admin/src/containers/LeftMenu/index.js b/packages/strapi-admin/admin/src/containers/LeftMenu/index.js index efacfe55ae..42b844a039 100644 --- a/packages/strapi-admin/admin/src/containers/LeftMenu/index.js +++ b/packages/strapi-admin/admin/src/containers/LeftMenu/index.js @@ -37,8 +37,6 @@ const LeftMenu = ({ version, plugins }) => { [pluginsSectionLinks] ); - console.log(pluginsSectionLinks); - useEffect(() => { const getLinksPermissions = async () => { const checkPermissions = async (index, permissionsToCheck) => { diff --git a/packages/strapi-admin/admin/src/containers/LeftMenu/init.js b/packages/strapi-admin/admin/src/containers/LeftMenu/init.js index a68f2f24ca..5c197bc5ea 100644 --- a/packages/strapi-admin/admin/src/containers/LeftMenu/init.js +++ b/packages/strapi-admin/admin/src/containers/LeftMenu/init.js @@ -1,8 +1,27 @@ import { get, omit, set, sortBy } from 'lodash'; +import { SETTINGS_BASE_URL } from '../../config'; + +const getPluginsSettingsPermissions = plugins => + Object.values(plugins).reduce((acc, current) => { + const pluginSettings = get(current, 'settings.global', []); + + pluginSettings.forEach(setting => { + const permissions = get(setting, 'permissions', []); + + permissions.forEach(permission => { + acc.push(permission); + }); + }); + + return acc; + }, []); const sortLinks = links => sortBy(links, object => object.name); const init = (initialState, plugins = {}) => { + // For each plugin retrieve the permissions associated to each injected link + const settingsPermissions = getPluginsSettingsPermissions(plugins); + const pluginsLinks = Object.values(plugins).reduce((acc, current) => { const pluginsSectionLinks = get(current, 'menu.pluginsSectionLinks', []); @@ -12,6 +31,17 @@ const init = (initialState, plugins = {}) => { return { ...omit(link, 'name'), isDisplayed: false }; }); + const settingsLinkIndex = initialState.generalSectionLinks.findIndex( + obj => obj.destination === SETTINGS_BASE_URL + ); + + if (settingsPermissions.length && settingsLinkIndex !== -1) { + const permissionsPath = ['generalSectionLinks', settingsLinkIndex, 'permissions']; + const alreadyCreatedPermissions = get(initialState, permissionsPath, []); + + set(initialState, permissionsPath, [...alreadyCreatedPermissions, ...settingsPermissions]); + } + if (sortedLinks.length) { set(initialState, 'pluginsSectionLinks', sortedLinks); } diff --git a/packages/strapi-admin/admin/src/containers/LeftMenu/reducer.js b/packages/strapi-admin/admin/src/containers/LeftMenu/reducer.js index cd46b111a2..34f7c5fa95 100644 --- a/packages/strapi-admin/admin/src/containers/LeftMenu/reducer.js +++ b/packages/strapi-admin/admin/src/containers/LeftMenu/reducer.js @@ -46,10 +46,7 @@ const initialState = { { action: 'admin::roles.update', subject: null }, { action: 'admin::roles.read', subject: null }, { action: 'admin::roles.delete', subject: null }, - - // TODO this should be set by the plugin directly - // media library - { action: 'plugins::upload.settings.read', subject: null }, + // Here are added the plugins settings permissions during the init phase ], }, ], diff --git a/packages/strapi-admin/admin/src/containers/LeftMenu/tests/init.test.js b/packages/strapi-admin/admin/src/containers/LeftMenu/tests/init.test.js index 10a2225d24..e7758e6f95 100644 --- a/packages/strapi-admin/admin/src/containers/LeftMenu/tests/init.test.js +++ b/packages/strapi-admin/admin/src/containers/LeftMenu/tests/init.test.js @@ -5,9 +5,10 @@ describe('ADMIN | LeftMenu | init', () => { it('should return the initialState if the plugins are empty', () => { const initialState = { ok: true, + generalSectionLinks: [], }; - expect(init(initialState)).toEqual({ ok: true }); + expect(init(initialState)).toEqual({ ok: true, generalSectionLinks: [] }); }); it('should create the pluginsSectionLinks correctly', () => { diff --git a/packages/strapi-admin/admin/src/plugins.js b/packages/strapi-admin/admin/src/plugins.js index fe49218c64..0c96a9d0cf 100644 --- a/packages/strapi-admin/admin/src/plugins.js +++ b/packages/strapi-admin/admin/src/plugins.js @@ -32,6 +32,6 @@ module.exports = { .default, 'strapi-plugin-email': require('../../../strapi-plugin-email/admin/src').default, - // 'strapi-plugin-upload': require('../../../strapi-plugin-upload/admin/src').default, + 'strapi-plugin-upload': require('../../../strapi-plugin-upload/admin/src').default, 'strapi-plugin-graphql': require('../../../strapi-plugin-graphql/admin/src').default, }; diff --git a/packages/strapi-admin/admin/src/utils/fakePermissionsData.js b/packages/strapi-admin/admin/src/utils/fakePermissionsData.js index 6999cea5ff..42593921b8 100644 --- a/packages/strapi-admin/admin/src/utils/fakePermissionsData.js +++ b/packages/strapi-admin/admin/src/utils/fakePermissionsData.js @@ -234,12 +234,12 @@ const data = { // fields: null, // conditions: [], // }, - { - action: 'admin::marketplace.plugins.install', - subject: null, - fields: null, - conditions: ['some condition'], - }, + // { + // action: 'admin::marketplace.plugins.install', + // subject: null, + // fields: null, + // conditions: ['some condition'], + // }, // { // action: 'admin::marketplace.plugins.uninstall', // subject: null, @@ -248,82 +248,82 @@ const data = { // }, // Admin webhooks - { - action: 'admin::webhooks.create', - subject: null, - fields: null, - conditions: [], - }, - { - action: 'admin::webhooks.read', - subject: null, - fields: null, - conditions: [], - }, - { - action: 'admin::webhooks.update', - subject: null, - fields: null, - conditions: [], - }, - { - action: 'admin::webhooks.delete', - subject: null, - fields: null, - conditions: [], - }, + // { + // action: 'admin::webhooks.create', + // subject: null, + // fields: null, + // conditions: [], + // }, + // { + // action: 'admin::webhooks.read', + // subject: null, + // fields: null, + // conditions: [], + // }, + // { + // action: 'admin::webhooks.update', + // subject: null, + // fields: null, + // conditions: [], + // }, + // { + // action: 'admin::webhooks.delete', + // subject: null, + // fields: null, + // conditions: [], + // }, - // Admin users - { - action: 'admin::users.create', - subject: null, - fields: null, - conditions: [], - }, - { - action: 'admin::users.read', - subject: null, - fields: null, - conditions: [], - }, - { - action: 'admin::users.update', - subject: null, - fields: null, - conditions: [], - }, - { - action: 'admin::users.delete', - subject: null, - fields: null, - conditions: [], - }, + // // Admin users + // { + // action: 'admin::users.create', + // subject: null, + // fields: null, + // conditions: [], + // }, + // { + // action: 'admin::users.read', + // subject: null, + // fields: null, + // conditions: [], + // }, + // { + // action: 'admin::users.update', + // subject: null, + // fields: null, + // conditions: [], + // }, + // { + // action: 'admin::users.delete', + // subject: null, + // fields: null, + // conditions: [], + // }, - // Admin roles - { - action: 'admin::roles.create', - subject: null, - fields: null, - conditions: [], - }, - { - action: 'admin::roles.read', - subject: null, - fields: null, - conditions: [], - }, - { - action: 'admin::roles.update', - subject: null, - fields: null, - conditions: [], - }, - { - action: 'admin::roles.delete', - subject: null, - fields: null, - conditions: [], - }, + // // Admin roles + // { + // action: 'admin::roles.create', + // subject: null, + // fields: null, + // conditions: [], + // }, + // { + // action: 'admin::roles.read', + // subject: null, + // fields: null, + // conditions: [], + // }, + // { + // action: 'admin::roles.update', + // subject: null, + // fields: null, + // conditions: [], + // }, + // { + // action: 'admin::roles.delete', + // subject: null, + // fields: null, + // conditions: [], + // }, // Content type builder { diff --git a/packages/strapi-plugin-upload/admin/src/index.js b/packages/strapi-plugin-upload/admin/src/index.js index 359172ee7f..a74490d6d1 100644 --- a/packages/strapi-plugin-upload/admin/src/index.js +++ b/packages/strapi-plugin-upload/admin/src/index.js @@ -50,6 +50,8 @@ export default strapi => { name: 'media-library', to: `${strapi.settingsBaseURL}/media-library`, Component: SettingsPage, + // TODO write documentation + permissions: [{ action: 'plugins::upload.settings.read', subject: null }], }, ], },