Add permissions check to plugins main components except the ctm

Signed-off-by: soupette <cyril.lpz@gmail.com>
This commit is contained in:
soupette 2020-06-10 14:52:09 +02:00 committed by Alexandre Bodin
parent 2e314756cf
commit 3c8c15efca
8 changed files with 100 additions and 51 deletions

View File

@ -343,12 +343,12 @@ const data = {
},
// Content type builder
// {
// action: 'plugins::content-type-builder.read',
// subject: null,
// fields: null,
// conditions: [],
// },
{
action: 'plugins::content-type-builder.read',
subject: null,
fields: null,
conditions: [],
},
// Documentation plugin
{
@ -371,12 +371,12 @@ const data = {
// },
// Upload plugin
// {
// action: 'plugins::upload.read',
// subject: null,
// fields: null,
// conditions: [],
// },
{
action: 'plugins::upload.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'plugins::upload.assets.create',
subject: null,

View File

@ -1,13 +1,17 @@
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import { WithPagePermissions } from 'strapi-helper-plugin';
import pluginId from '../../pluginId';
import pluginPermissions from '../../permissions';
import HomePage from '../HomePage';
const App = () => {
return (
<Switch>
<Route path={`/plugins/${pluginId}`} component={HomePage} />
</Switch>
<WithPagePermissions permissions={pluginPermissions.main}>
<Switch>
<Route path={`/plugins/${pluginId}`} component={HomePage} />
</Switch>
</WithPagePermissions>
);
};

View File

@ -7,6 +7,7 @@
import pluginPkg from '../../package.json';
import pluginLogo from './assets/images/logo.svg';
import pluginPermissions from './permissions';
import App from './containers/App';
import Initializer from './containers/Initializer';
import SettingsPage from './containers/SettingsPage';
@ -50,7 +51,7 @@ export default strapi => {
name: 'media-library',
to: `${strapi.settingsBaseURL}/media-library`,
Component: SettingsPage,
permissions: [{ action: 'plugins::upload.settings.read', subject: null }],
permissions: pluginPermissions.settings,
},
],
},
@ -66,7 +67,7 @@ export default strapi => {
defaultMessage: 'Media Library',
},
name,
permissions: [{ action: 'plugins::upload.read', subject: null }],
permissions: pluginPermissions.main,
},
],
},

View File

@ -0,0 +1,13 @@
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: [
// TODO check if it is the right permissions
{ action: 'plugins::upload.read', subject: null },
],
settings: [{ action: 'plugins::upload.settings.read', subject: null }],
};
export default pluginPermissions;

View File

@ -6,33 +6,15 @@
*/
import React from 'react';
import { Switch, Redirect, Route, useRouteMatch } from 'react-router-dom';
import { NotFound } from 'strapi-helper-plugin';
import pluginId from '../../pluginId';
import EditPage from '../EditPage';
import HomePage from '../HomePage';
import { WithPagePermissions } from 'strapi-helper-plugin';
import pluginPermissions from '../../permissions';
import Main from '../Main';
const App = () => {
const settingType = useRouteMatch(`/plugins/${pluginId}/:settingType`);
// Todo check if the settingType is allowed
if (!settingType) {
return <Redirect to={`/plugins/${pluginId}/roles`} />;
}
return (
<div className={pluginId}>
<Switch>
<Route
path={`/plugins/${pluginId}/:settingType/:actionType/:id?`}
component={EditPage}
exact
/>
<Route path={`/plugins/${pluginId}/:settingType`} component={HomePage} exact />
<Route component={NotFound} />
</Switch>
</div>
<WithPagePermissions permissions={pluginPermissions.main}>
<Main />
</WithPagePermissions>
);
};

View File

@ -0,0 +1,39 @@
/**
*
* This component is the skeleton around the actual pages, and should only
* contain code that should be seen on all pages. (e.g. navigation bar)
*
*/
import React from 'react';
import { Switch, Redirect, Route, useRouteMatch } from 'react-router-dom';
import { NotFound } from 'strapi-helper-plugin';
import pluginId from '../../pluginId';
import EditPage from '../EditPage';
import HomePage from '../HomePage';
const Main = () => {
const settingType = useRouteMatch(`/plugins/${pluginId}/:settingType`);
// Todo check if the settingType is allowed
if (!settingType) {
return <Redirect to={`/plugins/${pluginId}/roles`} />;
}
return (
<div className={pluginId}>
<Switch>
<Route
path={`/plugins/${pluginId}/:settingType/:actionType/:id?`}
component={EditPage}
exact
/>
<Route path={`/plugins/${pluginId}/:settingType`} component={HomePage} exact />
<Route component={NotFound} />
</Switch>
</div>
);
};
export default Main;

View File

@ -7,6 +7,7 @@
import pluginPkg from '../../package.json';
import pluginLogo from './assets/images/logo.svg';
import pluginPermissions from './permissions';
import layout from '../../config/layout';
import pluginId from './pluginId';
import App from './containers/App';
@ -48,16 +49,7 @@ export default strapi => {
defaultMessage: 'Roles & Permissions',
},
name,
permissions: [
{ action: 'plugins::users-permissions.advanced-settings.read', subject: null },
{ action: 'plugins::users-permissions.advanced-settings.update', subject: null },
{ action: 'plugins::users-permissions.email-templates.read', subject: null },
{ action: 'plugins::users-permissions.email-templates.update', subject: null },
{ action: 'plugins::users-permissions.providers.read', subject: null },
{ action: 'plugins::users-permissions.providers.update', subject: null },
{ action: 'plugins::users-permissions.roles.create', subject: null },
{ action: 'plugins::users-permissions.roles.read', subject: null },
],
permissions: pluginPermissions.main,
},
],
},

View File

@ -0,0 +1,18 @@
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: 'plugins::users-permissions.advanced-settings.read', subject: null },
{ action: 'plugins::users-permissions.advanced-settings.update', subject: null },
{ action: 'plugins::users-permissions.email-templates.read', subject: null },
{ action: 'plugins::users-permissions.email-templates.update', subject: null },
{ action: 'plugins::users-permissions.providers.read', subject: null },
{ action: 'plugins::users-permissions.providers.update', subject: null },
{ action: 'plugins::users-permissions.roles.create', subject: null },
{ action: 'plugins::users-permissions.roles.read', subject: null },
],
};
export default pluginPermissions;