diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js index 818d82370d..f34c003e63 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js @@ -13,7 +13,7 @@ const RelationSingle = ({ metadatas, value }) => { ); diff --git a/packages/core/admin/admin/src/content-manager/components/SelectOne/SingleValue.js b/packages/core/admin/admin/src/content-manager/components/SelectOne/SingleValue.js index 6427a13328..0ed34ecb89 100644 --- a/packages/core/admin/admin/src/content-manager/components/SelectOne/SingleValue.js +++ b/packages/core/admin/admin/src/content-manager/components/SelectOne/SingleValue.js @@ -43,13 +43,13 @@ const SingleValue = (props) => { - {props.data.label || '-'} + {props.data.label ?? '-'} ); } - return {props.data.label || '-'}; + return {props.data.label ?? '-'}; }; SingleValue.propTypes = { diff --git a/packages/core/admin/admin/src/content-manager/components/SelectWrapper/Option.js b/packages/core/admin/admin/src/content-manager/components/SelectWrapper/Option.js index 23ddd224f7..3c70fb2fe9 100644 --- a/packages/core/admin/admin/src/content-manager/components/SelectWrapper/Option.js +++ b/packages/core/admin/admin/src/content-manager/components/SelectWrapper/Option.js @@ -41,13 +41,13 @@ const Option = (props) => { - {props.label || '-'} + {props.label ?? '-'} ); } - return {props.label || '-'}; + return {props.label ?? '-'}; }; Option.defaultProps = { diff --git a/packages/core/admin/server/controllers/__tests__/content-api.test.js b/packages/core/admin/server/controllers/__tests__/content-api.test.js new file mode 100644 index 0000000000..6fce23383b --- /dev/null +++ b/packages/core/admin/server/controllers/__tests__/content-api.test.js @@ -0,0 +1,38 @@ +'use strict'; + +const createContext = require('../../../../../../test/helpers/create-context'); +const contentApiController = require('../content-api'); + +describe('Content API permissions', () => { + const actionsMap = { + 'api::address': { + controllers: { + address: ['find', 'findOne'], + }, + }, + 'api::category': { + controllers: { + category: ['find', 'findOne', 'create', 'update', 'delete', 'createLocalization'], + }, + }, + }; + + test('return content api layout successfully', async () => { + const getActionsMap = jest.fn().mockResolvedValue(actionsMap); + const send = jest.fn(); + const ctx = createContext({}, { send }); + + global.strapi = { + contentAPI: { + permissions: { + getActionsMap, + }, + }, + }; + + await contentApiController.getPermissions(ctx); + + expect(getActionsMap).toHaveBeenCalled(); + expect(send).toHaveBeenCalledWith({ data: actionsMap }); + }); +}); diff --git a/packages/core/admin/server/controllers/api-token.js b/packages/core/admin/server/controllers/api-token.js index 84a56addb8..2b5e19b043 100644 --- a/packages/core/admin/server/controllers/api-token.js +++ b/packages/core/admin/server/controllers/api-token.js @@ -124,4 +124,11 @@ module.exports = { const apiToken = await apiTokenService.update(id, attributes); ctx.send({ data: apiToken }); }, + + async getLayout(ctx) { + const apiTokenService = getService('api-token'); + const layout = await apiTokenService.getApiTokenLayout(); + + ctx.send({ data: layout }); + }, }; diff --git a/packages/core/admin/server/controllers/content-api.js b/packages/core/admin/server/controllers/content-api.js new file mode 100644 index 0000000000..7a988a1713 --- /dev/null +++ b/packages/core/admin/server/controllers/content-api.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = { + async getPermissions(ctx) { + const actionsMap = await strapi.contentAPI.permissions.getActionsMap(); + + ctx.send({ data: actionsMap }); + }, +}; diff --git a/packages/core/admin/server/controllers/index.js b/packages/core/admin/server/controllers/index.js index 696358b183..a42f15cf61 100644 --- a/packages/core/admin/server/controllers/index.js +++ b/packages/core/admin/server/controllers/index.js @@ -9,4 +9,5 @@ module.exports = { role: require('./role'), user: require('./user'), webhooks: require('./webhooks'), + 'content-api': require('./content-api'), }; diff --git a/packages/core/admin/server/routes/api-tokens.js b/packages/core/admin/server/routes/api-tokens.js index e994382db6..b9653e4bcd 100644 --- a/packages/core/admin/server/routes/api-tokens.js +++ b/packages/core/admin/server/routes/api-tokens.js @@ -67,4 +67,12 @@ module.exports = [ ], }, }, + { + method: 'GET', + path: '/api-token-layout', + handler: 'api-token.getLayout', + config: { + policies: ['admin::isAuthenticatedAdmin'], + }, + }, ]; diff --git a/packages/core/admin/server/routes/content-api.js b/packages/core/admin/server/routes/content-api.js new file mode 100644 index 0000000000..cc563c1b94 --- /dev/null +++ b/packages/core/admin/server/routes/content-api.js @@ -0,0 +1,12 @@ +'use strict'; + +module.exports = [ + { + method: 'GET', + path: '/content-api/permissions', + handler: 'content-api.getPermissions', + config: { + policies: ['admin::isAuthenticatedAdmin'], + }, + }, +]; diff --git a/packages/core/admin/server/routes/index.js b/packages/core/admin/server/routes/index.js index ee0b6f8606..8181e79715 100644 --- a/packages/core/admin/server/routes/index.js +++ b/packages/core/admin/server/routes/index.js @@ -7,6 +7,7 @@ const users = require('./users'); const roles = require('./roles'); const webhooks = require('./webhooks'); const apiTokens = require('./api-tokens'); +const contentApi = require('./content-api'); module.exports = [ ...admin, @@ -16,4 +17,5 @@ module.exports = [ ...roles, ...webhooks, ...apiTokens, + ...contentApi, ]; diff --git a/packages/core/helper-plugin/package.json b/packages/core/helper-plugin/package.json index 65c243f612..3d98e3dbf2 100644 --- a/packages/core/helper-plugin/package.json +++ b/packages/core/helper-plugin/package.json @@ -73,7 +73,7 @@ "@babel/runtime": "7.18.9", "@storybook/addon-actions": "6.5.10", "@storybook/addon-essentials": "6.5.9", - "@storybook/addon-links": "6.5.9", + "@storybook/addon-links": "6.5.10", "@storybook/builder-webpack5": "6.5.9", "@storybook/manager-webpack5": "6.4.10", "@storybook/react": "^6.5.10", diff --git a/yarn.lock b/yarn.lock index 5844a5e679..fb0e2c193e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3888,16 +3888,16 @@ regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" -"@storybook/addon-links@6.5.9": - version "6.5.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-6.5.9.tgz#91cbca0c044796badf2498723fdd10dacea5748b" - integrity sha512-4BYC7pkxL3NLRnEgTA9jpIkObQKril+XFj1WtmY/lngF90vvK0Kc/TtvTA2/5tSgrHfxEuPevIdxMIyLJ4ejWQ== +"@storybook/addon-links@6.5.10": + version "6.5.10" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-6.5.10.tgz#f66568fbc84b942032ac2de85f799d69fcf77922" + integrity sha512-r3WzYIPz7WjHiaPObC2Tg6bHuZRBb/Kt/X+Eitw+jTqBel7ksvkO36tn81q8Eyj61qIdNQmUWAaX/0aewT0kLA== dependencies: - "@storybook/addons" "6.5.9" - "@storybook/client-logger" "6.5.9" - "@storybook/core-events" "6.5.9" + "@storybook/addons" "6.5.10" + "@storybook/client-logger" "6.5.10" + "@storybook/core-events" "6.5.10" "@storybook/csf" "0.0.2--canary.4566f4d.1" - "@storybook/router" "6.5.9" + "@storybook/router" "6.5.10" "@types/qs" "^6.9.5" core-js "^3.8.2" global "^4.4.0"