mirror of
https://github.com/strapi/strapi.git
synced 2025-12-25 06:04:29 +00:00
Finish select policy dynamic
This commit is contained in:
parent
8e94fad183
commit
0866a5e484
@ -54,6 +54,7 @@ class Controller extends React.Component {
|
||||
{map(Object.keys(this.props.actions).sort(), (actionKey) => (
|
||||
<InputCheckbox
|
||||
inputSelected={this.state.inputSelected}
|
||||
isOpen={this.props.isOpen}
|
||||
key={actionKey}
|
||||
label={actionKey}
|
||||
name={`${this.props.inputNamePath}.controllers.${this.props.name}.${actionKey}.enabled`}
|
||||
@ -80,6 +81,7 @@ Controller.defaultProps = {
|
||||
Controller.propTypes = {
|
||||
actions: PropTypes.object,
|
||||
inputNamePath: PropTypes.string,
|
||||
isOpen: PropTypes.bool.isRequired,
|
||||
name: PropTypes.string,
|
||||
};
|
||||
|
||||
|
||||
@ -18,6 +18,10 @@ class InputCheckbox extends React.Component { // eslint-disable-line react/prefe
|
||||
if (nextProps.inputSelected !== this.props.inputSelected && nextProps.inputSelected !== this.props.name) {
|
||||
this.setState({ showBackground: false });
|
||||
}
|
||||
|
||||
if (!nextProps.isOpen) {
|
||||
this.setState({ showBackground: false, showCog: false });
|
||||
}
|
||||
}
|
||||
|
||||
handleChange = () => {
|
||||
@ -34,6 +38,7 @@ class InputCheckbox extends React.Component { // eslint-disable-line react/prefe
|
||||
this.props.setNewInputSelected(this.props.name);
|
||||
// Tell the policies component to show the associated routes
|
||||
this.context.setShouldDisplayPolicieshint();
|
||||
this.context.setInputPoliciesPath(this.props.name);
|
||||
} else {
|
||||
this.setState({ showBackground: false, showCog: false });
|
||||
this.props.setNewInputSelected('');
|
||||
@ -45,6 +50,7 @@ class InputCheckbox extends React.Component { // eslint-disable-line react/prefe
|
||||
handleClick = () => {
|
||||
this.setState({ showBackground: !this.state.showBackground });
|
||||
this.props.setNewInputSelected(this.props.name);
|
||||
this.context.setInputPoliciesPath(this.props.name);
|
||||
}
|
||||
|
||||
render() {
|
||||
@ -81,6 +87,7 @@ class InputCheckbox extends React.Component { // eslint-disable-line react/prefe
|
||||
|
||||
InputCheckbox.contextTypes = {
|
||||
onChange: PropTypes.func.isRequired,
|
||||
setInputPoliciesPath: PropTypes.func.isRequired,
|
||||
setShouldDisplayPolicieshint: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
@ -91,6 +98,7 @@ InputCheckbox.defaultProps = {
|
||||
|
||||
InputCheckbox.propTypes = {
|
||||
inputSelected: PropTypes.string.isRequired,
|
||||
isOpen: PropTypes.bool.isRequired,
|
||||
label: PropTypes.string,
|
||||
name: PropTypes.string.isRequired,
|
||||
setNewInputSelected: PropTypes.func.isRequired,
|
||||
|
||||
@ -27,6 +27,10 @@ class Plugin extends React.Component { // eslint-disable-line react/prefer-state
|
||||
handleClick = () => {
|
||||
this.props.changePluginSelected(this.props.name);
|
||||
this.setState({ collapse: !this.state.collapse });
|
||||
|
||||
if (this.state.collapse) {
|
||||
this.context.resetShouldDisplayPoliciesHint();
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
@ -66,9 +70,11 @@ class Plugin extends React.Component { // eslint-disable-line react/prefer-state
|
||||
{map(get(this.props.plugin, 'controllers'), (controllerActions, key) => (
|
||||
<Controller
|
||||
inputNamePath={`permissions.${this.props.name}`}
|
||||
isOpen={this.state.collapse}
|
||||
key={key}
|
||||
name={key}
|
||||
actions={controllerActions}
|
||||
resetInputBackground={this.state.resetInputBackground}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
@ -8,13 +8,20 @@ import React from 'react';
|
||||
import cn from 'classnames';
|
||||
import PropTypes from 'prop-types';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { get } from 'lodash';
|
||||
|
||||
import Input from 'components/Input';
|
||||
|
||||
import styles from './styles.scss';
|
||||
|
||||
class Policies extends React.Component { // eslint-disable-line react/prefer-stateless-function
|
||||
handleChange = (e) => this.context.onChange(e);
|
||||
|
||||
render() {
|
||||
const baseTitle = 'users-permissions.Policies.header';
|
||||
const title = this.props.shouldDisplayPoliciesHint ? 'hint' : 'title';
|
||||
const value = get(this.props.values, this.props.inputSelectName);
|
||||
|
||||
return (
|
||||
<div className={cn('col-md-5',styles.policies)}>
|
||||
<div className="container-fluid">
|
||||
@ -22,6 +29,18 @@ class Policies extends React.Component { // eslint-disable-line react/prefer-sta
|
||||
<div className={cn('col-md-12', styles.header)}>
|
||||
<FormattedMessage id={`${baseTitle}.${title}`} />
|
||||
</div>
|
||||
{!this.props.shouldDisplayPoliciesHint ? (
|
||||
<Input
|
||||
customBootstrapClass="col-md-12"
|
||||
label="users-permissions.Policies.InputSelect.empty"
|
||||
name={this.props.inputSelectName}
|
||||
onChange={this.handleChange}
|
||||
selectOptions={this.props.selectOptions}
|
||||
type="select"
|
||||
validations={{}}
|
||||
value={value}
|
||||
/>
|
||||
) : ''}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -29,8 +48,15 @@ class Policies extends React.Component { // eslint-disable-line react/prefer-sta
|
||||
}
|
||||
}
|
||||
|
||||
Policies.contextTypes = {
|
||||
onChange: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
Policies.propTypes = {
|
||||
inputSelectName: PropTypes.string.isRequired,
|
||||
selectOptions: PropTypes.array.isRequired,
|
||||
shouldDisplayPoliciesHint: PropTypes.bool.isRequired,
|
||||
values: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
export default Policies;
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
*
|
||||
*/
|
||||
import { fromJS, List, Map } from 'immutable';
|
||||
import { get } from 'lodash';
|
||||
import { get, replace } from 'lodash';
|
||||
import {
|
||||
ADD_USER,
|
||||
GET_PERMISSIONS,
|
||||
@ -24,6 +24,7 @@ import {
|
||||
SET_ACTION_TYPE,
|
||||
SET_ERRORS,
|
||||
SET_FORM,
|
||||
SET_INPUT_POLICIES_PATH,
|
||||
SET_ROLE_ID,
|
||||
SET_SHOULD_DISPLAY_POLICIES_HINT,
|
||||
SUBMIT,
|
||||
@ -61,9 +62,15 @@ export function getPolicies() {
|
||||
}
|
||||
|
||||
export function getPoliciesSucceeded(policies) {
|
||||
const formattedPolicies = policies.policies.reduce((acc, current) => {
|
||||
acc.push({ value: current });
|
||||
|
||||
return acc;
|
||||
},[]);
|
||||
|
||||
return {
|
||||
type: GET_POLICIES_SUCCEEDED,
|
||||
policies,
|
||||
policies: [{ name: 'users-permissions.Policies.InputSelect.empty', value: '' }].concat(formattedPolicies),
|
||||
};
|
||||
}
|
||||
|
||||
@ -176,6 +183,15 @@ export function setForm() {
|
||||
};
|
||||
}
|
||||
|
||||
export function setInputPoliciesPath(path) {
|
||||
const inputPath = replace(path, 'enabled', 'policy');
|
||||
|
||||
return {
|
||||
type: SET_INPUT_POLICIES_PATH,
|
||||
inputPath,
|
||||
};
|
||||
}
|
||||
|
||||
export function setRoleId(roleId) {
|
||||
return {
|
||||
type: SET_ROLE_ID,
|
||||
|
||||
@ -22,6 +22,7 @@ export const SELECT_ALL_ACTIONS = 'UsersPermissions/EditPage/SELECT_ALL_ACTIONS'
|
||||
export const SET_ACTION_TYPE = 'UsersPermissions/EditPage/SET_ACTION_TYPE';
|
||||
export const SET_ERRORS = 'UsersPermissions/EditPage/SET_ERRORS';
|
||||
export const SET_FORM = 'UsersPermissions/EditPage/SET_FORM';
|
||||
export const SET_INPUT_POLICIES_PATH = 'UsersPermissions/EditPage/SET_INPUT_POLICIES_PATH';
|
||||
export const SET_ROLE_ID = 'UsersPermissions/EditPage/SET_ROLE_ID';
|
||||
export const SET_SHOULD_DISPLAY_POLICIES_HINT = 'UsersPermissions/EditPage/SET_SHOULD_DISPLAY_POLICIES_HINT';
|
||||
export const SUBMIT = 'UsersPermissions/EditPage/SUBMIT';
|
||||
|
||||
@ -39,6 +39,7 @@ import {
|
||||
setActionType,
|
||||
setErrors,
|
||||
setForm,
|
||||
setInputPoliciesPath,
|
||||
setRoleId,
|
||||
setShouldDisplayPolicieshint,
|
||||
submit,
|
||||
@ -58,6 +59,7 @@ export class EditPage extends React.Component { // eslint-disable-line react/pre
|
||||
{
|
||||
onChange: this.props.onChangeInput,
|
||||
selectAllActions: this.props.selectAllActions,
|
||||
setInputPoliciesPath: this.props.setInputPoliciesPath,
|
||||
setShouldDisplayPolicieshint: this.props.setShouldDisplayPolicieshint,
|
||||
resetShouldDisplayPoliciesHint: this.props.resetShouldDisplayPoliciesHint,
|
||||
}
|
||||
@ -88,6 +90,7 @@ export class EditPage extends React.Component { // eslint-disable-line react/pre
|
||||
componentWillUnmount() {
|
||||
// Empty formErrors
|
||||
this.props.setErrors([]);
|
||||
this.props.resetShouldDisplayPoliciesHint();
|
||||
}
|
||||
|
||||
handleSubmit = () => {
|
||||
@ -203,6 +206,9 @@ export class EditPage extends React.Component { // eslint-disable-line react/pre
|
||||
/>
|
||||
<Policies
|
||||
shouldDisplayPoliciesHint={this.props.editPage.shouldDisplayPoliciesHint}
|
||||
inputSelectName={this.props.editPage.inputPoliciesPath}
|
||||
selectOptions={this.props.editPage.policies}
|
||||
values={this.props.editPage.modifiedData}
|
||||
/>
|
||||
</div>
|
||||
</form>
|
||||
@ -218,6 +224,7 @@ export class EditPage extends React.Component { // eslint-disable-line react/pre
|
||||
EditPage.childContextTypes = {
|
||||
onChange: PropTypes.func.isRequired,
|
||||
selectAllActions: PropTypes.func.isRequired,
|
||||
setInputPoliciesPath: PropTypes.func.isRequired,
|
||||
setShouldDisplayPolicieshint: PropTypes.func.isRequired,
|
||||
resetShouldDisplayPoliciesHint: PropTypes.func.isRequired,
|
||||
};
|
||||
@ -240,6 +247,7 @@ EditPage.propTypes = {
|
||||
setActionType: PropTypes.func.isRequired,
|
||||
setErrors: PropTypes.func.isRequired,
|
||||
setForm: PropTypes.func.isRequired,
|
||||
setInputPoliciesPath: PropTypes.func.isRequired,
|
||||
setRoleId: PropTypes.func.isRequired,
|
||||
setShouldDisplayPolicieshint: PropTypes.func.isRequired,
|
||||
submit: PropTypes.func.isRequired,
|
||||
@ -265,6 +273,7 @@ function mapDispatchToProps(dispatch) {
|
||||
setActionType,
|
||||
setErrors,
|
||||
setForm,
|
||||
setInputPoliciesPath,
|
||||
setRoleId,
|
||||
setShouldDisplayPolicieshint,
|
||||
submit,
|
||||
|
||||
@ -21,6 +21,7 @@ import {
|
||||
SET_ACTION_TYPE,
|
||||
SET_ERRORS,
|
||||
SET_FORM,
|
||||
SET_INPUT_POLICIES_PATH,
|
||||
SET_ROLE_ID,
|
||||
SET_SHOULD_DISPLAY_POLICIES_HINT,
|
||||
SUBMIT_ERROR,
|
||||
@ -36,6 +37,7 @@ const initialState = fromJS({
|
||||
didSubmit: false,
|
||||
formErrors: List([]),
|
||||
initialData: Map({}),
|
||||
inputPoliciesPath: '',
|
||||
modifiedData: Map({}),
|
||||
policies: List([]),
|
||||
roleId: '',
|
||||
@ -52,9 +54,8 @@ function editPageReducer(state = initialState, action) {
|
||||
return state
|
||||
.updateIn(['initialData', 'permissions'], () => action.permissions)
|
||||
.updateIn(['modifiedData', 'permissions'], () => action.permissions);
|
||||
|
||||
case GET_POLICIES_SUCCEEDED:
|
||||
return state.set('policies', List(action.policies.policies));
|
||||
return state.set('policies', List(action.policies));
|
||||
case GET_ROLE_SUCCEEDED:
|
||||
return state
|
||||
.set('didGetUsers', !state.get('didGetUsers'))
|
||||
@ -103,6 +104,8 @@ function editPageReducer(state = initialState, action) {
|
||||
.set('didGetUsers', !state.get('didGetUsers'))
|
||||
.set('initialData', action.form)
|
||||
.set('modifiedData', action.form);
|
||||
case SET_INPUT_POLICIES_PATH:
|
||||
return state.set('inputPoliciesPath', action.inputPath);
|
||||
case SET_ROLE_ID:
|
||||
return state.set('roleId', action.roleId);
|
||||
case SET_SHOULD_DISPLAY_POLICIES_HINT:
|
||||
|
||||
@ -108,6 +108,7 @@
|
||||
|
||||
"Plugins.header.title": "Permissions",
|
||||
"Plugins.header.description": "Only actions bound by a route are listed below.",
|
||||
"Policies.InputSelect.empty": "None",
|
||||
"Policies.header.hint": "Select the application's actions or the plugin's actions and put your mouse over to display the bounded route",
|
||||
"Policies.header.title": "Advanced settings",
|
||||
"PopUpForm.button.cancel": "Cancel",
|
||||
|
||||
@ -110,6 +110,7 @@
|
||||
"Plugins.header.title": "Permissions",
|
||||
"Plugins.header.description": "Sont listés uniquement les actions associées à une route.",
|
||||
|
||||
"Policies.InputSelect.empty": "Aucune",
|
||||
"Policies.header.hint": "Sélectionnez ...",
|
||||
"Policies.header.tile": "Paramètres avancés",
|
||||
"popUpForm.button.cancel": "Annuler",
|
||||
|
||||
@ -254,23 +254,23 @@
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"description": "",
|
||||
"name": "Guest",
|
||||
"description": "",
|
||||
"permissions": {
|
||||
"content-manager": {
|
||||
"controllers": {
|
||||
"contentmanager": {
|
||||
"models": {
|
||||
"enabled": true,
|
||||
"policy": ""
|
||||
"policy": "isauthenticated"
|
||||
},
|
||||
"find": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"count": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
"enabled": true,
|
||||
"policy": "isauthenticated"
|
||||
},
|
||||
"findOne": {
|
||||
"enabled": false,
|
||||
@ -302,37 +302,37 @@
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getModel": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getConnections": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"createModel": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"updateModel": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"deleteModel": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"autoReload": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"checkTableExists": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"autoReload": {
|
||||
"enabled": true,
|
||||
"policy": ""
|
||||
},
|
||||
"createModel": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getModel": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"deleteModel": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"identity": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getConnections": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -340,50 +340,14 @@
|
||||
"settings-manager": {
|
||||
"controllers": {
|
||||
"settingsmanager": {
|
||||
"menu": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"environments": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"languages": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"databases": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"database": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"databaseModel": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"get": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"update": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"createLanguage": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"deleteLanguage": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"createDatabase": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"updateDatabase": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
@ -396,9 +360,45 @@
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"update": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"databaseModel": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"createLanguage": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"get": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"createDatabase": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"databases": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"languages": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"database": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"identity": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"menu": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -454,6 +454,38 @@
|
||||
}
|
||||
},
|
||||
"userspermissions": {
|
||||
"searchUsers": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"deleteRole": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getPolicies": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getRoles": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getRole": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getPermissions": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"init": {
|
||||
"enabled": true,
|
||||
"policy": ""
|
||||
},
|
||||
"index": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"createRole": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
@ -462,49 +494,17 @@
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"deleteRole": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getPermissions": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getPolicies": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getRole": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"getRoles": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"index": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"init": {
|
||||
"enabled": true,
|
||||
"policy": ""
|
||||
},
|
||||
"searchUsers": {
|
||||
"identity": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"updateRole": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
},
|
||||
"identity": {
|
||||
"enabled": false,
|
||||
"policy": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user