mirror of
https://github.com/strapi/strapi.git
synced 2025-09-26 08:52:26 +00:00
Merge pull request #17034 from strapi/chore/plugin-permissions
Chore: Move plugin permissions into constants
This commit is contained in:
commit
bb7da5829d
@ -1,9 +1,7 @@
|
|||||||
const pluginPermissions = {
|
export const PERMISSIONS = {
|
||||||
// This permission regards the main component (App) and is used to tell
|
// This permission regards the main component (App) and is used to tell
|
||||||
// If the plugin link should be displayed in the menu
|
// 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
|
// 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
|
// plugin directly in the browser
|
||||||
main: [{ action: 'plugin::content-type-builder.read', subject: null }],
|
main: [{ action: 'plugin::content-type-builder.read', subject: null }],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default pluginPermissions;
|
|
@ -3,7 +3,7 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin';
|
|||||||
import pluginPkg from '../../package.json';
|
import pluginPkg from '../../package.json';
|
||||||
|
|
||||||
import PluginIcon from './components/PluginIcon';
|
import PluginIcon from './components/PluginIcon';
|
||||||
import pluginPermissions from './permissions';
|
import { PERMISSIONS } from './constants';
|
||||||
import pluginId from './pluginId';
|
import pluginId from './pluginId';
|
||||||
import reducers from './reducers';
|
import reducers from './reducers';
|
||||||
import formsAPI from './utils/formAPI';
|
import formsAPI from './utils/formAPI';
|
||||||
@ -21,7 +21,7 @@ export default {
|
|||||||
id: `${pluginId}.plugin.name`,
|
id: `${pluginId}.plugin.name`,
|
||||||
defaultMessage: 'Content Types Builder',
|
defaultMessage: 'Content Types Builder',
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.main,
|
permissions: PERMISSIONS.main,
|
||||||
async Component() {
|
async Component() {
|
||||||
const component = await import(
|
const component = await import(
|
||||||
/* webpackChunkName: "content-type-builder" */ './pages/App'
|
/* webpackChunkName: "content-type-builder" */ './pages/App'
|
||||||
|
@ -15,7 +15,7 @@ import { Route, Switch } from 'react-router-dom';
|
|||||||
import ContentTypeBuilderNav from '../../components/ContentTypeBuilderNav';
|
import ContentTypeBuilderNav from '../../components/ContentTypeBuilderNav';
|
||||||
import DataManagerProvider from '../../components/DataManagerProvider';
|
import DataManagerProvider from '../../components/DataManagerProvider';
|
||||||
import FormModalNavigationProvider from '../../components/FormModalNavigationProvider';
|
import FormModalNavigationProvider from '../../components/FormModalNavigationProvider';
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
import pluginId from '../../pluginId';
|
import pluginId from '../../pluginId';
|
||||||
import RecursivePath from '../RecursivePath';
|
import RecursivePath from '../RecursivePath';
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ const App = () => {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.main}>
|
<CheckPagePermissions permissions={PERMISSIONS.main}>
|
||||||
<Helmet title={title} />
|
<Helmet title={title} />
|
||||||
<FormModalNavigationProvider>
|
<FormModalNavigationProvider>
|
||||||
<DataManagerProvider>
|
<DataManagerProvider>
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
const pluginPermissions = {
|
export const PERMISSIONS = {
|
||||||
// This permission regards the main component (App) and is used to tell
|
// This permission regards the main component (App) and is used to tell
|
||||||
// If the plugin link should be displayed in the menu
|
// 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
|
// 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
|
// plugin directly in the browser
|
||||||
settings: [{ action: 'plugin::email.settings.read', subject: null }],
|
settings: [{ action: 'plugin::email.settings.read', subject: null }],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default pluginPermissions;
|
|
@ -9,7 +9,7 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin';
|
|||||||
|
|
||||||
import pluginPkg from '../../package.json';
|
import pluginPkg from '../../package.json';
|
||||||
|
|
||||||
import pluginPermissions from './permissions';
|
import { PERMISSIONS } from './constants';
|
||||||
import pluginId from './pluginId';
|
import pluginId from './pluginId';
|
||||||
import getTrad from './utils/getTrad';
|
import getTrad from './utils/getTrad';
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ export default {
|
|||||||
|
|
||||||
return component;
|
return component;
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.settings,
|
permissions: PERMISSIONS.settings,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -23,7 +23,7 @@ import {
|
|||||||
import { Envelop } from '@strapi/icons';
|
import { Envelop } from '@strapi/icons';
|
||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
|
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
import getTrad from '../../utils/getTrad';
|
import getTrad from '../../utils/getTrad';
|
||||||
import schema from '../../utils/schema';
|
import schema from '../../utils/schema';
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ import EmailHeader from './components/EmailHeader';
|
|||||||
import { fetchEmailSettings, postEmailTest } from './utils/api';
|
import { fetchEmailSettings, postEmailTest } from './utils/api';
|
||||||
|
|
||||||
const ProtectedSettingsPage = () => (
|
const ProtectedSettingsPage = () => (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.settings}>
|
<CheckPagePermissions permissions={PERMISSIONS.settings}>
|
||||||
<SettingsPage />
|
<SettingsPage />
|
||||||
</CheckPagePermissions>
|
</CheckPagePermissions>
|
||||||
);
|
);
|
||||||
|
@ -174,3 +174,43 @@ export const localStorageKeys = {
|
|||||||
modalView: `STRAPI_UPLOAD_MODAL_VIEW`,
|
modalView: `STRAPI_UPLOAD_MODAL_VIEW`,
|
||||||
view: `STRAPI_UPLOAD_LIBRARY_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 }],
|
||||||
|
};
|
||||||
|
@ -3,10 +3,10 @@ import { useMemo } from 'react';
|
|||||||
import { useRBAC } from '@strapi/helper-plugin';
|
import { useRBAC } from '@strapi/helper-plugin';
|
||||||
import omit from 'lodash/omit';
|
import omit from 'lodash/omit';
|
||||||
|
|
||||||
import pluginPermissions from '../permissions';
|
import { PERMISSIONS } from '../constants';
|
||||||
|
|
||||||
export const useMediaLibraryPermissions = () => {
|
export const useMediaLibraryPermissions = () => {
|
||||||
const permissions = useMemo(() => omit(pluginPermissions, 'main'), []);
|
const permissions = useMemo(() => omit(PERMISSIONS, 'main'), []);
|
||||||
const { allowedActions, isLoading } = useRBAC(permissions);
|
const { allowedActions, isLoading } = useRBAC(permissions);
|
||||||
|
|
||||||
return { ...allowedActions, isLoading };
|
return { ...allowedActions, isLoading };
|
||||||
|
@ -11,7 +11,7 @@ import pluginPkg from '../../package.json';
|
|||||||
import { MediaLibraryDialog } from './components/MediaLibraryDialog';
|
import { MediaLibraryDialog } from './components/MediaLibraryDialog';
|
||||||
import { MediaLibraryInput } from './components/MediaLibraryInput';
|
import { MediaLibraryInput } from './components/MediaLibraryInput';
|
||||||
import PluginIcon from './components/PluginIcon';
|
import PluginIcon from './components/PluginIcon';
|
||||||
import pluginPermissions from './permissions';
|
import { PERMISSIONS } from './constants';
|
||||||
import pluginId from './pluginId';
|
import pluginId from './pluginId';
|
||||||
import getTrad from './utils/getTrad';
|
import getTrad from './utils/getTrad';
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ export default {
|
|||||||
id: `${pluginId}.plugin.name`,
|
id: `${pluginId}.plugin.name`,
|
||||||
defaultMessage: 'Media Library',
|
defaultMessage: 'Media Library',
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.main,
|
permissions: PERMISSIONS.main,
|
||||||
async Component() {
|
async Component() {
|
||||||
const component = await import(/* webpackChunkName: "upload" */ './pages/App');
|
const component = await import(/* webpackChunkName: "upload" */ './pages/App');
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ export default {
|
|||||||
|
|
||||||
return component;
|
return component;
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.settings,
|
permissions: PERMISSIONS.settings,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async registerTrads({ locales }) {
|
async registerTrads({ locales }) {
|
||||||
|
@ -45,12 +45,11 @@ import { PaginationFooter } from '../../../components/PaginationFooter';
|
|||||||
import SortPicker from '../../../components/SortPicker';
|
import SortPicker from '../../../components/SortPicker';
|
||||||
import { TableList } from '../../../components/TableList';
|
import { TableList } from '../../../components/TableList';
|
||||||
import { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog';
|
import { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog';
|
||||||
import { localStorageKeys, viewOptions } from '../../../constants';
|
import { localStorageKeys, PERMISSIONS, viewOptions } from '../../../constants';
|
||||||
import { useAssets } from '../../../hooks/useAssets';
|
import { useAssets } from '../../../hooks/useAssets';
|
||||||
import { useFolder } from '../../../hooks/useFolder';
|
import { useFolder } from '../../../hooks/useFolder';
|
||||||
import { useFolders } from '../../../hooks/useFolders';
|
import { useFolders } from '../../../hooks/useFolders';
|
||||||
import { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions';
|
import { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions';
|
||||||
import pluginPermissions from '../../../permissions';
|
|
||||||
import { containsAssetFilter, getBreadcrumbDataML, getFolderURL, getTrad } from '../../../utils';
|
import { containsAssetFilter, getBreadcrumbDataML, getFolderURL, getTrad } from '../../../utils';
|
||||||
|
|
||||||
import { BulkActions } from './components/BulkActions';
|
import { BulkActions } from './components/BulkActions';
|
||||||
@ -257,7 +256,7 @@ export const MediaLibrary = () => {
|
|||||||
}
|
}
|
||||||
endActions={
|
endActions={
|
||||||
<>
|
<>
|
||||||
<CheckPermissions permissions={pluginPermissions.configureView}>
|
<CheckPermissions permissions={PERMISSIONS.configureView}>
|
||||||
<ActionContainer paddingTop={1} paddingBottom={1}>
|
<ActionContainer paddingTop={1} paddingBottom={1}>
|
||||||
<IconButton
|
<IconButton
|
||||||
forwardedAs={ReactRouterLink}
|
forwardedAs={ReactRouterLink}
|
||||||
|
@ -27,7 +27,7 @@ import isEqual from 'lodash/isEqual';
|
|||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
|
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
import { getRequestUrl, getTrad } from '../../utils';
|
import { getRequestUrl, getTrad } from '../../utils';
|
||||||
|
|
||||||
import init from './init';
|
import init from './init';
|
||||||
@ -275,7 +275,7 @@ export const SettingsPage = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const ProtectedSettingsPage = () => (
|
const ProtectedSettingsPage = () => (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.settings}>
|
<CheckPagePermissions permissions={PERMISSIONS.settings}>
|
||||||
<SettingsPage />
|
<SettingsPage />
|
||||||
</CheckPagePermissions>
|
</CheckPagePermissions>
|
||||||
);
|
);
|
||||||
|
@ -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;
|
|
@ -1,4 +1,4 @@
|
|||||||
const pluginPermissions = {
|
export const PERMISSIONS = {
|
||||||
// This permission regards the main component (App) and is used to tell
|
// This permission regards the main component (App) and is used to tell
|
||||||
// If the plugin link should be displayed in the menu
|
// 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
|
// 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 }],
|
regenerate: [{ action: 'plugin::documentation.settings.regenerate', subject: null }],
|
||||||
update: [{ action: 'plugin::documentation.settings.update', subject: null }],
|
update: [{ action: 'plugin::documentation.settings.update', subject: null }],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default pluginPermissions;
|
|
@ -9,7 +9,7 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin';
|
|||||||
import pluginPkg from '../../package.json';
|
import pluginPkg from '../../package.json';
|
||||||
|
|
||||||
import PluginIcon from './components/PluginIcon';
|
import PluginIcon from './components/PluginIcon';
|
||||||
import pluginPermissions from './permissions';
|
import { PERMISSIONS } from './constants';
|
||||||
import pluginId from './pluginId';
|
import pluginId from './pluginId';
|
||||||
|
|
||||||
const name = pluginPkg.strapi.name;
|
const name = pluginPkg.strapi.name;
|
||||||
@ -23,7 +23,7 @@ export default {
|
|||||||
id: `${pluginId}.plugin.name`,
|
id: `${pluginId}.plugin.name`,
|
||||||
defaultMessage: 'Documentation',
|
defaultMessage: 'Documentation',
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.main,
|
permissions: PERMISSIONS.main,
|
||||||
async Component() {
|
async Component() {
|
||||||
const component = await import(
|
const component = await import(
|
||||||
/* webpackChunkName: "documentation-page" */ './pages/PluginPage'
|
/* webpackChunkName: "documentation-page" */ './pages/PluginPage'
|
||||||
@ -53,7 +53,7 @@ export default {
|
|||||||
|
|
||||||
return component;
|
return component;
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.main,
|
permissions: PERMISSIONS.main,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async registerTrads({ locales }) {
|
async registerTrads({ locales }) {
|
||||||
|
@ -37,7 +37,7 @@ import { Eye as Show, Refresh as Reload, Trash } from '@strapi/icons';
|
|||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
|
|
||||||
import permissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
import { getTrad } from '../../utils';
|
import { getTrad } from '../../utils';
|
||||||
import openWithNewTab from '../../utils/openWithNewTab';
|
import openWithNewTab from '../../utils/openWithNewTab';
|
||||||
import useReactQuery from '../utils/useReactQuery';
|
import useReactQuery from '../utils/useReactQuery';
|
||||||
@ -107,7 +107,7 @@ const PluginPage = () => {
|
|||||||
})}
|
})}
|
||||||
primaryAction={
|
primaryAction={
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
<CheckPermissions permissions={permissions.open}>
|
<CheckPermissions permissions={PERMISSIONS.open}>
|
||||||
<Button onClick={() => openDocVersion(data?.currentVersion)} startIcon={<Show />}>
|
<Button onClick={() => openDocVersion(data?.currentVersion)} startIcon={<Show />}>
|
||||||
{formatMessage({
|
{formatMessage({
|
||||||
id: getTrad('pages.PluginPage.Button.open'),
|
id: getTrad('pages.PluginPage.Button.open'),
|
||||||
@ -166,7 +166,7 @@ const PluginPage = () => {
|
|||||||
{ target: `${doc.version}` }
|
{ target: `${doc.version}` }
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<CheckPermissions permissions={permissions.regenerate}>
|
<CheckPermissions permissions={PERMISSIONS.regenerate}>
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={() => handleRegenerateDoc(doc.version)}
|
onClick={() => handleRegenerateDoc(doc.version)}
|
||||||
noBorder
|
noBorder
|
||||||
@ -180,7 +180,7 @@ const PluginPage = () => {
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
</CheckPermissions>
|
</CheckPermissions>
|
||||||
<CheckPermissions permissions={permissions.update}>
|
<CheckPermissions permissions={PERMISSIONS.update}>
|
||||||
{doc.version !== data.currentVersion && (
|
{doc.version !== data.currentVersion && (
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={() => handleClickDelete(doc.version)}
|
onClick={() => handleClickDelete(doc.version)}
|
||||||
|
@ -26,7 +26,7 @@ import { Formik } from 'formik';
|
|||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
|
|
||||||
import FieldActionWrapper from '../../components/FieldActionWrapper';
|
import FieldActionWrapper from '../../components/FieldActionWrapper';
|
||||||
import permissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
import { getTrad } from '../../utils';
|
import { getTrad } from '../../utils';
|
||||||
import schema from '../utils/schema';
|
import schema from '../utils/schema';
|
||||||
import useReactQuery from '../utils/useReactQuery';
|
import useReactQuery from '../utils/useReactQuery';
|
||||||
@ -70,7 +70,7 @@ const SettingsPage = () => {
|
|||||||
defaultMessage: 'Configure the documentation plugin',
|
defaultMessage: 'Configure the documentation plugin',
|
||||||
})}
|
})}
|
||||||
primaryAction={
|
primaryAction={
|
||||||
<CheckPermissions permissions={permissions.update}>
|
<CheckPermissions permissions={PERMISSIONS.update}>
|
||||||
<Button type="submit" startIcon={<Check />}>
|
<Button type="submit" startIcon={<Check />}>
|
||||||
{formatMessage({
|
{formatMessage({
|
||||||
id: getTrad('pages.SettingsPage.Button.save'),
|
id: getTrad('pages.SettingsPage.Button.save'),
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
const i18nPermissions = {
|
export const PERMISSIONS = {
|
||||||
accessMain: [{ action: 'plugin::i18n.locale.read', subject: null }],
|
accessMain: [{ action: 'plugin::i18n.locale.read', subject: null }],
|
||||||
create: [{ action: 'plugin::i18n.locale.create', subject: null }],
|
create: [{ action: 'plugin::i18n.locale.create', subject: null }],
|
||||||
delete: [{ action: 'plugin::i18n.locale.delete', subject: null }],
|
delete: [{ action: 'plugin::i18n.locale.delete', subject: null }],
|
||||||
update: [{ action: 'plugin::i18n.locale.update', subject: null }],
|
update: [{ action: 'plugin::i18n.locale.update', subject: null }],
|
||||||
read: [{ action: 'plugin::i18n.locale.read', subject: null }],
|
read: [{ action: 'plugin::i18n.locale.read', subject: null }],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default i18nPermissions;
|
|
@ -11,13 +11,13 @@ import PublishModalAdditionalInfos from './components/CMListViewInjectedComponen
|
|||||||
import UnpublishModalAdditionalInfos from './components/CMListViewInjectedComponents/UnpublishModalAdditionalInfos';
|
import UnpublishModalAdditionalInfos from './components/CMListViewInjectedComponents/UnpublishModalAdditionalInfos';
|
||||||
import Initializer from './components/Initializer';
|
import Initializer from './components/Initializer';
|
||||||
import LocalePicker from './components/LocalePicker';
|
import LocalePicker from './components/LocalePicker';
|
||||||
|
import { PERMISSIONS } from './constants';
|
||||||
import addColumnToTableHook from './contentManagerHooks/addColumnToTable';
|
import addColumnToTableHook from './contentManagerHooks/addColumnToTable';
|
||||||
import addLocaleToCollectionTypesLinksHook from './contentManagerHooks/addLocaleToCollectionTypesLinks';
|
import addLocaleToCollectionTypesLinksHook from './contentManagerHooks/addLocaleToCollectionTypesLinks';
|
||||||
import addLocaleToSingleTypesLinksHook from './contentManagerHooks/addLocaleToSingleTypesLinks';
|
import addLocaleToSingleTypesLinksHook from './contentManagerHooks/addLocaleToSingleTypesLinks';
|
||||||
import mutateEditViewLayoutHook from './contentManagerHooks/mutateEditViewLayout';
|
import mutateEditViewLayoutHook from './contentManagerHooks/mutateEditViewLayout';
|
||||||
import i18nReducers from './hooks/reducers';
|
import i18nReducers from './hooks/reducers';
|
||||||
import middlewares from './middlewares';
|
import middlewares from './middlewares';
|
||||||
import pluginPermissions from './permissions';
|
|
||||||
import pluginId from './pluginId';
|
import pluginId from './pluginId';
|
||||||
import { getTrad } from './utils';
|
import { getTrad } from './utils';
|
||||||
import LOCALIZED_FIELDS from './utils/localizedFields';
|
import LOCALIZED_FIELDS from './utils/localizedFields';
|
||||||
@ -68,7 +68,7 @@ export default {
|
|||||||
|
|
||||||
return component;
|
return component;
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.accessMain,
|
permissions: PERMISSIONS.accessMain,
|
||||||
});
|
});
|
||||||
|
|
||||||
app.injectContentManagerComponent('editView', 'informations', {
|
app.injectContentManagerComponent('editView', 'informations', {
|
||||||
|
@ -2,7 +2,7 @@ import React from 'react';
|
|||||||
|
|
||||||
import { useRBAC } from '@strapi/helper-plugin';
|
import { useRBAC } from '@strapi/helper-plugin';
|
||||||
|
|
||||||
import i18nPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
|
|
||||||
import LocaleSettingsPage from './LocaleSettingsPage';
|
import LocaleSettingsPage from './LocaleSettingsPage';
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ const ProtectedLocaleSettingsPage = () => {
|
|||||||
const {
|
const {
|
||||||
isLoading,
|
isLoading,
|
||||||
allowedActions: { canRead, canUpdate, canCreate, canDelete },
|
allowedActions: { canRead, canUpdate, canCreate, canDelete },
|
||||||
} = useRBAC(i18nPermissions);
|
} = useRBAC(PERMISSIONS);
|
||||||
|
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
const pluginPermissions = {
|
export const PERMISSIONS = {
|
||||||
// Roles
|
// Roles
|
||||||
accessRoles: [
|
accessRoles: [
|
||||||
{ action: 'plugin::users-permissions.roles.create', subject: null },
|
{ action: 'plugin::users-permissions.roles.create', subject: null },
|
||||||
@ -27,5 +27,3 @@ const pluginPermissions = {
|
|||||||
readProviders: [{ action: 'plugin::users-permissions.providers.read', subject: null }],
|
readProviders: [{ action: 'plugin::users-permissions.providers.read', subject: null }],
|
||||||
updateProviders: [{ action: 'plugin::users-permissions.providers.update', subject: null }],
|
updateProviders: [{ action: 'plugin::users-permissions.providers.update', subject: null }],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default pluginPermissions;
|
|
@ -8,7 +8,7 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin';
|
|||||||
|
|
||||||
import pluginPkg from '../../package.json';
|
import pluginPkg from '../../package.json';
|
||||||
|
|
||||||
import pluginPermissions from './permissions';
|
import { PERMISSIONS } from './constants';
|
||||||
import pluginId from './pluginId';
|
import pluginId from './pluginId';
|
||||||
import getTrad from './utils/getTrad';
|
import getTrad from './utils/getTrad';
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ export default {
|
|||||||
|
|
||||||
return component;
|
return component;
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.accessRoles,
|
permissions: PERMISSIONS.accessRoles,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
intlLabel: {
|
intlLabel: {
|
||||||
@ -56,7 +56,7 @@ export default {
|
|||||||
|
|
||||||
return component;
|
return component;
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.readProviders,
|
permissions: PERMISSIONS.readProviders,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
intlLabel: {
|
intlLabel: {
|
||||||
@ -72,7 +72,7 @@ export default {
|
|||||||
|
|
||||||
return component;
|
return component;
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.readEmailTemplates,
|
permissions: PERMISSIONS.readEmailTemplates,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
intlLabel: {
|
intlLabel: {
|
||||||
@ -88,7 +88,7 @@ export default {
|
|||||||
|
|
||||||
return component;
|
return component;
|
||||||
},
|
},
|
||||||
permissions: pluginPermissions.readAdvancedSettings,
|
permissions: PERMISSIONS.readAdvancedSettings,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -30,7 +30,7 @@ import { Formik } from 'formik';
|
|||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
||||||
|
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
import { getTrad } from '../../utils';
|
import { getTrad } from '../../utils';
|
||||||
|
|
||||||
import { fetchData, putAdvancedSettings } from './utils/api';
|
import { fetchData, putAdvancedSettings } from './utils/api';
|
||||||
@ -38,7 +38,7 @@ import layout from './utils/layout';
|
|||||||
import schema from './utils/schema';
|
import schema from './utils/schema';
|
||||||
|
|
||||||
const ProtectedAdvancedSettingsPage = () => (
|
const ProtectedAdvancedSettingsPage = () => (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.readAdvancedSettings}>
|
<CheckPagePermissions permissions={PERMISSIONS.readAdvancedSettings}>
|
||||||
<AdvancedSettingsPage />
|
<AdvancedSettingsPage />
|
||||||
</CheckPagePermissions>
|
</CheckPagePermissions>
|
||||||
);
|
);
|
||||||
@ -51,10 +51,7 @@ const AdvancedSettingsPage = () => {
|
|||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
useFocusWhenNavigate();
|
useFocusWhenNavigate();
|
||||||
|
|
||||||
const updatePermissions = useMemo(
|
const updatePermissions = useMemo(() => ({ update: PERMISSIONS.updateAdvancedSettings }), []);
|
||||||
() => ({ update: pluginPermissions.updateAdvancedSettings }),
|
|
||||||
[]
|
|
||||||
);
|
|
||||||
const {
|
const {
|
||||||
isLoading: isLoadingForPermissions,
|
isLoading: isLoadingForPermissions,
|
||||||
allowedActions: { canUpdate },
|
allowedActions: { canUpdate },
|
||||||
|
@ -14,7 +14,7 @@ import {
|
|||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
||||||
|
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
import { getTrad } from '../../utils';
|
import { getTrad } from '../../utils';
|
||||||
|
|
||||||
import EmailForm from './components/EmailForm';
|
import EmailForm from './components/EmailForm';
|
||||||
@ -22,7 +22,7 @@ import EmailTable from './components/EmailTable';
|
|||||||
import { fetchData, putEmailTemplate } from './utils/api';
|
import { fetchData, putEmailTemplate } from './utils/api';
|
||||||
|
|
||||||
const ProtectedEmailTemplatesPage = () => (
|
const ProtectedEmailTemplatesPage = () => (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.readEmailTemplates}>
|
<CheckPagePermissions permissions={PERMISSIONS.readEmailTemplates}>
|
||||||
<EmailTemplatesPage />
|
<EmailTemplatesPage />
|
||||||
</CheckPagePermissions>
|
</CheckPagePermissions>
|
||||||
);
|
);
|
||||||
@ -41,7 +41,7 @@ const EmailTemplatesPage = () => {
|
|||||||
const [templateToEdit, setTemplateToEdit] = useState(null);
|
const [templateToEdit, setTemplateToEdit] = useState(null);
|
||||||
|
|
||||||
const updatePermissions = useMemo(() => {
|
const updatePermissions = useMemo(() => {
|
||||||
return { update: pluginPermissions.updateEmailTemplates };
|
return { update: PERMISSIONS.updateEmailTemplates };
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
|
@ -35,7 +35,7 @@ import { useIntl } from 'react-intl';
|
|||||||
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
||||||
|
|
||||||
import FormModal from '../../components/FormModal';
|
import FormModal from '../../components/FormModal';
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
import { getTrad } from '../../utils';
|
import { getTrad } from '../../utils';
|
||||||
|
|
||||||
import { fetchData, putProvider } from './utils/api';
|
import { fetchData, putProvider } from './utils/api';
|
||||||
@ -56,7 +56,7 @@ export const ProvidersPage = () => {
|
|||||||
const { lockApp, unlockApp } = useOverlayBlocker();
|
const { lockApp, unlockApp } = useOverlayBlocker();
|
||||||
|
|
||||||
const updatePermissions = useMemo(() => {
|
const updatePermissions = useMemo(() => {
|
||||||
return { update: pluginPermissions.updateProviders };
|
return { update: PERMISSIONS.updateProviders };
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@ -267,7 +267,7 @@ export const ProvidersPage = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const ProtectedProvidersPage = () => (
|
const ProtectedProvidersPage = () => (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.readProviders}>
|
<CheckPagePermissions permissions={PERMISSIONS.readProviders}>
|
||||||
<ProvidersPage />
|
<ProvidersPage />
|
||||||
</CheckPagePermissions>
|
</CheckPagePermissions>
|
||||||
);
|
);
|
||||||
|
@ -36,7 +36,7 @@ import { useIntl } from 'react-intl';
|
|||||||
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
|
|
||||||
import permissions from '../../../permissions';
|
import { PERMISSIONS } from '../../../constants';
|
||||||
import pluginId from '../../../pluginId';
|
import pluginId from '../../../pluginId';
|
||||||
import { getTrad } from '../../../utils';
|
import { getTrad } from '../../../utils';
|
||||||
|
|
||||||
@ -60,10 +60,10 @@ const RoleListPage = () => {
|
|||||||
|
|
||||||
const updatePermissions = useMemo(() => {
|
const updatePermissions = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
create: permissions.createRole,
|
create: PERMISSIONS.createRole,
|
||||||
read: permissions.readRoles,
|
read: PERMISSIONS.readRoles,
|
||||||
update: permissions.updateRole,
|
update: PERMISSIONS.updateRole,
|
||||||
delete: permissions.deleteRole,
|
delete: PERMISSIONS.deleteRole,
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ const RoleListPage = () => {
|
|||||||
defaultMessage: 'List of roles',
|
defaultMessage: 'List of roles',
|
||||||
})}
|
})}
|
||||||
primaryAction={
|
primaryAction={
|
||||||
<CheckPermissions permissions={permissions.createRole}>
|
<CheckPermissions permissions={PERMISSIONS.createRole}>
|
||||||
<Button onClick={handleNewRoleClick} startIcon={<Plus />} size="S">
|
<Button onClick={handleNewRoleClick} startIcon={<Plus />} size="S">
|
||||||
{formatMessage({
|
{formatMessage({
|
||||||
id: getTrad('List.button.roles'),
|
id: getTrad('List.button.roles'),
|
||||||
@ -220,7 +220,7 @@ const RoleListPage = () => {
|
|||||||
<TableBody
|
<TableBody
|
||||||
sortedRoles={sortedRoles}
|
sortedRoles={sortedRoles}
|
||||||
canDelete={canDelete}
|
canDelete={canDelete}
|
||||||
permissions={permissions}
|
permissions={PERMISSIONS}
|
||||||
setRoleToDelete={setRoleToDelete}
|
setRoleToDelete={setRoleToDelete}
|
||||||
onDelete={[showConfirmDelete, setShowConfirmDelete]}
|
onDelete={[showConfirmDelete, setShowConfirmDelete]}
|
||||||
/>
|
/>
|
||||||
|
@ -2,12 +2,12 @@ import React from 'react';
|
|||||||
|
|
||||||
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
||||||
|
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
|
|
||||||
import RolesCreatePage from './CreatePage';
|
import RolesCreatePage from './CreatePage';
|
||||||
|
|
||||||
const ProtectedRolesCreatePage = () => (
|
const ProtectedRolesCreatePage = () => (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.createRole}>
|
<CheckPagePermissions permissions={PERMISSIONS.createRole}>
|
||||||
<RolesCreatePage />
|
<RolesCreatePage />
|
||||||
</CheckPagePermissions>
|
</CheckPagePermissions>
|
||||||
);
|
);
|
||||||
|
@ -2,12 +2,12 @@ import React from 'react';
|
|||||||
|
|
||||||
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
||||||
|
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
|
|
||||||
import RolesEditPage from './EditPage';
|
import RolesEditPage from './EditPage';
|
||||||
|
|
||||||
const ProtectedRolesEditPage = () => (
|
const ProtectedRolesEditPage = () => (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.updateRole}>
|
<CheckPagePermissions permissions={PERMISSIONS.updateRole}>
|
||||||
<RolesEditPage />
|
<RolesEditPage />
|
||||||
</CheckPagePermissions>
|
</CheckPagePermissions>
|
||||||
);
|
);
|
||||||
|
@ -2,13 +2,13 @@ import React from 'react';
|
|||||||
|
|
||||||
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
||||||
|
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
|
|
||||||
import RolesListPage from './ListPage';
|
import RolesListPage from './ListPage';
|
||||||
|
|
||||||
const ProtectedRolesListPage = () => {
|
const ProtectedRolesListPage = () => {
|
||||||
return (
|
return (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.accessRoles}>
|
<CheckPagePermissions permissions={PERMISSIONS.accessRoles}>
|
||||||
<RolesListPage />
|
<RolesListPage />
|
||||||
</CheckPagePermissions>
|
</CheckPagePermissions>
|
||||||
);
|
);
|
||||||
|
@ -3,7 +3,7 @@ import React from 'react';
|
|||||||
import { AnErrorOccurred, CheckPagePermissions } from '@strapi/helper-plugin';
|
import { AnErrorOccurred, CheckPagePermissions } from '@strapi/helper-plugin';
|
||||||
import { Route, Switch } from 'react-router-dom';
|
import { Route, Switch } from 'react-router-dom';
|
||||||
|
|
||||||
import pluginPermissions from '../../permissions';
|
import { PERMISSIONS } from '../../constants';
|
||||||
import pluginId from '../../pluginId';
|
import pluginId from '../../pluginId';
|
||||||
|
|
||||||
import ProtectedRolesCreatePage from './ProtectedCreatePage';
|
import ProtectedRolesCreatePage from './ProtectedCreatePage';
|
||||||
@ -12,7 +12,7 @@ import ProtectedRolesListPage from './ProtectedListPage';
|
|||||||
|
|
||||||
const Roles = () => {
|
const Roles = () => {
|
||||||
return (
|
return (
|
||||||
<CheckPagePermissions permissions={pluginPermissions.accessRoles}>
|
<CheckPagePermissions permissions={PERMISSIONS.accessRoles}>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route
|
<Route
|
||||||
path={`/settings/${pluginId}/roles/new`}
|
path={`/settings/${pluginId}/roles/new`}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user