mirror of
https://github.com/strapi/strapi.git
synced 2025-11-01 18:33:55 +00:00
Add permissions check to plugins main components except the ctm
Signed-off-by: soupette <cyril.lpz@gmail.com>
This commit is contained in:
parent
2e314756cf
commit
3c8c15efca
@ -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,
|
||||
|
||||
@ -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>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@ -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,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
13
packages/strapi-plugin-upload/admin/src/permissions.js
Normal file
13
packages/strapi-plugin-upload/admin/src/permissions.js
Normal 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;
|
||||
@ -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>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@ -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;
|
||||
@ -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,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@ -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;
|
||||
Loading…
x
Reference in New Issue
Block a user