diff --git a/packages/strapi-admin/admin/src/utils/fakePermissionsData.js b/packages/strapi-admin/admin/src/utils/fakePermissionsData.js index 231e103ffc..c1ad1b536b 100644 --- a/packages/strapi-admin/admin/src/utils/fakePermissionsData.js +++ b/packages/strapi-admin/admin/src/utils/fakePermissionsData.js @@ -372,18 +372,18 @@ const data = { fields: null, conditions: [], }, - // { - // action: 'plugins::documentation.settings.update', - // subject: null, - // fields: null, - // conditions:[], - // }, - // { - // action: 'plugins::documentation.settings.regenerate', - // subject: null, - // fields: null, - // conditions:[], - // }, + { + action: 'plugins::documentation.settings.update', + subject: null, + fields: null, + conditions: [], + }, + { + action: 'plugins::documentation.settings.regenerate', + subject: null, + fields: null, + conditions: [], + }, // Upload plugin { diff --git a/packages/strapi-plugin-documentation/admin/src/components/Row/ButtonContainer.js b/packages/strapi-plugin-documentation/admin/src/components/Row/ButtonContainer.js index 9554f738b1..521eb73ad2 100755 --- a/packages/strapi-plugin-documentation/admin/src/components/Row/ButtonContainer.js +++ b/packages/strapi-plugin-documentation/admin/src/components/Row/ButtonContainer.js @@ -1,16 +1,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; +import { WithPermissions } from 'strapi-helper-plugin'; +import pluginPermissions from '../../permissions'; import openWithNewTab from '../../utils/openWithNewTab'; import { StyledButton } from './components'; -const ButtonContainer = ({ - currentDocVersion, - isHeader, - onClick, - onClickDelete, - version, -}) => { +const ButtonContainer = ({ currentDocVersion, isHeader, onClick, onClickDelete, version }) => { if (isHeader) { return
; } @@ -23,16 +19,17 @@ const ButtonContainer = ({ > - onClick(version)} - > - - - onClickDelete(version)} - /> + + onClick(version)}> + + + + + onClickDelete(version)} + /> +
); }; diff --git a/packages/strapi-plugin-documentation/admin/src/containers/App/index.js b/packages/strapi-plugin-documentation/admin/src/containers/App/index.js index bed27c950d..5f1db7d082 100755 --- a/packages/strapi-plugin-documentation/admin/src/containers/App/index.js +++ b/packages/strapi-plugin-documentation/admin/src/containers/App/index.js @@ -7,7 +7,7 @@ import React from 'react'; import { Switch, Route } from 'react-router-dom'; -import { NotFound, WithPagePermissions } from 'strapi-helper-plugin'; +import { NotFound, WithPagePermissions, useUser } from 'strapi-helper-plugin'; // Utils import pluginPermissions from '../../permissions'; import pluginId from '../../pluginId'; @@ -15,11 +15,17 @@ import pluginId from '../../pluginId'; import HomePage from '../HomePage'; function App() { + const userPermissions = useUser(); + return (
- + } + exact + />
diff --git a/packages/strapi-plugin-documentation/admin/src/containers/HomePage/index.js b/packages/strapi-plugin-documentation/admin/src/containers/HomePage/index.js index f7cbad66f9..f3a0a20b69 100755 --- a/packages/strapi-plugin-documentation/admin/src/containers/HomePage/index.js +++ b/packages/strapi-plugin-documentation/admin/src/containers/HomePage/index.js @@ -17,9 +17,11 @@ import { LoadingIndicatorPage, InputsIndex as Input, GlobalContext, + hasPermissions, } from 'strapi-helper-plugin'; import pluginId from '../../pluginId'; +import pluginPermissions from '../../permissions'; import getTrad from '../../utils/getTrad'; import Block from '../../components/Block'; @@ -41,10 +43,37 @@ import selectHomePage from './selectors'; import saga from './saga'; export class HomePage extends React.Component { + state = { canOpen: false, canUpdate: false }; + componentDidMount() { this.props.getDocInfos(); + this.getPermissions(); } + getPermissions = async () => { + const { userPermissions } = this.props; + + const checkPermissions = async permissionName => { + const hasPermission = await hasPermissions( + userPermissions, + pluginPermissions[permissionName] + ); + + return hasPermission; + }; + + const generateArrayOfPromises = array => + array.map(permissionName => checkPermissions(permissionName)); + + try { + const [canOpen, canUpdate] = await Promise.all(generateArrayOfPromises(['open', 'update'])); + + this.setState({ canOpen, canUpdate }); + } catch (err) { + console.error(err); + } + }; + getRestrictedAccessValue = () => { const { form } = this.props; @@ -52,8 +81,11 @@ export class HomePage extends React.Component { }; getPluginHeaderActions = () => { - return [ - { + const { canOpen, canUpdate } = this.state; + const actions = []; + + if (canOpen) { + actions.push({ color: 'none', label: this.context.formatMessage({ id: getTrad('containers.HomePage.Button.open'), @@ -62,8 +94,11 @@ export class HomePage extends React.Component { onClick: this.openCurrentDocumentation, type: 'button', key: 'button-open', - }, - { + }); + } + + if (canUpdate) { + actions.push({ label: this.context.formatMessage({ id: getTrad('containers.HomePage.Button.update'), }), @@ -71,8 +106,10 @@ export class HomePage extends React.Component { onClick: () => {}, type: 'submit', key: 'button-submit', - }, - ]; + }); + } + + return actions; }; handleCopy = () => { @@ -142,6 +179,7 @@ export class HomePage extends React.Component { onSubmit, versionToDelete, } = this.props; + const { formatMessage } = this.context; if (isLoading) { @@ -220,6 +258,7 @@ HomePage.defaultProps = { onSubmit: () => {}, onUpdateDoc: () => {}, prefix: '/documentation', + userPermissions: [], versionToDelete: '', }; @@ -237,6 +276,7 @@ HomePage.propTypes = { onSubmit: PropTypes.func, onUpdateDoc: PropTypes.func, prefix: PropTypes.string, + userPermissions: PropTypes.array, versionToDelete: PropTypes.string, }; diff --git a/packages/strapi-plugin-documentation/admin/src/permissions.js b/packages/strapi-plugin-documentation/admin/src/permissions.js index ff7e888080..47c9366051 100644 --- a/packages/strapi-plugin-documentation/admin/src/permissions.js +++ b/packages/strapi-plugin-documentation/admin/src/permissions.js @@ -5,9 +5,15 @@ const pluginPermissions = { // plugin directly in the browser main: [ { action: 'plugins::documentation.read', subject: null }, - { action: 'plugins::documentation.regenerate', subject: null }, - { action: 'plugins::documentation.update', subject: null }, + { action: 'plugins::documentation.settings.regenerate', subject: null }, + { action: 'plugins::documentation.settings.update', subject: null }, ], + open: [ + { action: 'plugins::documentation.read', subject: null }, + { action: 'plugins::documentation.settings.regenerate', subject: null }, + ], + regenerate: [{ action: 'plugins::documentation.settings.regenerate', subject: null }], + update: [{ action: 'plugins::documentation.settings.update', subject: null }], }; export default pluginPermissions;