mirror of
https://github.com/strapi/strapi.git
synced 2025-11-16 10:07: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
|
// Content type builder
|
||||||
// {
|
{
|
||||||
// action: 'plugins::content-type-builder.read',
|
action: 'plugins::content-type-builder.read',
|
||||||
// subject: null,
|
subject: null,
|
||||||
// fields: null,
|
fields: null,
|
||||||
// conditions: [],
|
conditions: [],
|
||||||
// },
|
},
|
||||||
|
|
||||||
// Documentation plugin
|
// Documentation plugin
|
||||||
{
|
{
|
||||||
@ -371,12 +371,12 @@ const data = {
|
|||||||
// },
|
// },
|
||||||
|
|
||||||
// Upload plugin
|
// Upload plugin
|
||||||
// {
|
{
|
||||||
// action: 'plugins::upload.read',
|
action: 'plugins::upload.read',
|
||||||
// subject: null,
|
subject: null,
|
||||||
// fields: null,
|
fields: null,
|
||||||
// conditions: [],
|
conditions: [],
|
||||||
// },
|
},
|
||||||
{
|
{
|
||||||
action: 'plugins::upload.assets.create',
|
action: 'plugins::upload.assets.create',
|
||||||
subject: null,
|
subject: null,
|
||||||
|
|||||||
@ -1,13 +1,17 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Switch, Route } from 'react-router-dom';
|
import { Switch, Route } from 'react-router-dom';
|
||||||
|
import { WithPagePermissions } from 'strapi-helper-plugin';
|
||||||
import pluginId from '../../pluginId';
|
import pluginId from '../../pluginId';
|
||||||
|
import pluginPermissions from '../../permissions';
|
||||||
import HomePage from '../HomePage';
|
import HomePage from '../HomePage';
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
return (
|
return (
|
||||||
<Switch>
|
<WithPagePermissions permissions={pluginPermissions.main}>
|
||||||
<Route path={`/plugins/${pluginId}`} component={HomePage} />
|
<Switch>
|
||||||
</Switch>
|
<Route path={`/plugins/${pluginId}`} component={HomePage} />
|
||||||
|
</Switch>
|
||||||
|
</WithPagePermissions>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
import pluginPkg from '../../package.json';
|
import pluginPkg from '../../package.json';
|
||||||
import pluginLogo from './assets/images/logo.svg';
|
import pluginLogo from './assets/images/logo.svg';
|
||||||
|
import pluginPermissions from './permissions';
|
||||||
import App from './containers/App';
|
import App from './containers/App';
|
||||||
import Initializer from './containers/Initializer';
|
import Initializer from './containers/Initializer';
|
||||||
import SettingsPage from './containers/SettingsPage';
|
import SettingsPage from './containers/SettingsPage';
|
||||||
@ -50,7 +51,7 @@ export default strapi => {
|
|||||||
name: 'media-library',
|
name: 'media-library',
|
||||||
to: `${strapi.settingsBaseURL}/media-library`,
|
to: `${strapi.settingsBaseURL}/media-library`,
|
||||||
Component: SettingsPage,
|
Component: SettingsPage,
|
||||||
permissions: [{ action: 'plugins::upload.settings.read', subject: null }],
|
permissions: pluginPermissions.settings,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@ -66,7 +67,7 @@ export default strapi => {
|
|||||||
defaultMessage: 'Media Library',
|
defaultMessage: 'Media Library',
|
||||||
},
|
},
|
||||||
name,
|
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 React from 'react';
|
||||||
import { Switch, Redirect, Route, useRouteMatch } from 'react-router-dom';
|
import { WithPagePermissions } from 'strapi-helper-plugin';
|
||||||
import { NotFound } from 'strapi-helper-plugin';
|
import pluginPermissions from '../../permissions';
|
||||||
import pluginId from '../../pluginId';
|
import Main from '../Main';
|
||||||
|
|
||||||
import EditPage from '../EditPage';
|
|
||||||
import HomePage from '../HomePage';
|
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const settingType = useRouteMatch(`/plugins/${pluginId}/:settingType`);
|
|
||||||
|
|
||||||
// Todo check if the settingType is allowed
|
|
||||||
if (!settingType) {
|
|
||||||
return <Redirect to={`/plugins/${pluginId}/roles`} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={pluginId}>
|
<WithPagePermissions permissions={pluginPermissions.main}>
|
||||||
<Switch>
|
<Main />
|
||||||
<Route
|
</WithPagePermissions>
|
||||||
path={`/plugins/${pluginId}/:settingType/:actionType/:id?`}
|
|
||||||
component={EditPage}
|
|
||||||
exact
|
|
||||||
/>
|
|
||||||
<Route path={`/plugins/${pluginId}/:settingType`} component={HomePage} exact />
|
|
||||||
<Route component={NotFound} />
|
|
||||||
</Switch>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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 pluginPkg from '../../package.json';
|
||||||
import pluginLogo from './assets/images/logo.svg';
|
import pluginLogo from './assets/images/logo.svg';
|
||||||
|
import pluginPermissions from './permissions';
|
||||||
import layout from '../../config/layout';
|
import layout from '../../config/layout';
|
||||||
import pluginId from './pluginId';
|
import pluginId from './pluginId';
|
||||||
import App from './containers/App';
|
import App from './containers/App';
|
||||||
@ -48,16 +49,7 @@ export default strapi => {
|
|||||||
defaultMessage: 'Roles & Permissions',
|
defaultMessage: 'Roles & Permissions',
|
||||||
},
|
},
|
||||||
name,
|
name,
|
||||||
permissions: [
|
permissions: pluginPermissions.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 },
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@ -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