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"