From 985aebf86120188c2a14adfab39af7c4da3c1c9d Mon Sep 17 00:00:00 2001 From: =Corey Hulen Date: Wed, 23 Sep 2015 15:16:48 -0700 Subject: Fixing state setting --- api/user.go | 4 +- .../components/admin_console/admin_sidebar.jsx | 24 ++++++---- .../admin_console/reset_password_modal.jsx | 12 ++--- web/react/components/admin_console/team_users.jsx | 55 +++++++++++++++++----- web/react/components/admin_console/user_item.jsx | 40 +++++++++++++++- 5 files changed, 102 insertions(+), 33 deletions(-) diff --git a/api/user.go b/api/user.go index 5be703bfb..2edbde3e2 100644 --- a/api/user.go +++ b/api/user.go @@ -938,8 +938,8 @@ func updateRoles(c *Context, w http.ResponseWriter, r *http.Request) { return } - if model.IsInRole(new_roles, model.ROLE_SYSTEM_ADMIN) { - c.Err = model.NewAppError("updateRoles", "The system_admin role can only be set from the command line", "") + if model.IsInRole(new_roles, model.ROLE_SYSTEM_ADMIN) && !c.IsSystemAdmin() { + c.Err = model.NewAppError("updateRoles", "The system_admin role can only be set by another system admin", "") c.Err.StatusCode = http.StatusForbidden return } diff --git a/web/react/components/admin_console/admin_sidebar.jsx b/web/react/components/admin_console/admin_sidebar.jsx index 375a6a8e9..cebb3ff20 100644 --- a/web/react/components/admin_console/admin_sidebar.jsx +++ b/web/react/components/admin_console/admin_sidebar.jsx @@ -192,15 +192,6 @@ export default class AdminSidebar extends React.Component { {'Log Settings'} -
  • - - {'Logs'} - -
  • {teams}
  • +
  • +

    + + {'OTHER'} +

    +
  • +
  • + + {'Logs'} + +
  • diff --git a/web/react/components/admin_console/reset_password_modal.jsx b/web/react/components/admin_console/reset_password_modal.jsx index 4aa86dfcb..0b83edb17 100644 --- a/web/react/components/admin_console/reset_password_modal.jsx +++ b/web/react/components/admin_console/reset_password_modal.jsx @@ -21,13 +21,11 @@ export default class ResetPasswordModal extends React.Component { var password = React.findDOMNode(this.refs.password).value; if (!password || password.length < 5) { - this.state.serverError = 'Please enter at least 5 characters.'; - this.setState(this.state); + this.setState({serverError: 'Please enter at least 5 characters.'}); return; } - this.state.serverError = null; - this.setState(this.state); + this.setState({serverError: null}); var data = {}; data.new_password = password; @@ -39,15 +37,13 @@ export default class ResetPasswordModal extends React.Component { this.props.onModalSubmit(React.findDOMNode(this.refs.password).value); }, (err) => { - this.state.serverError = err.message; - this.setState(this.state); + this.setState({serverError: err.message}); } ); } doCancel() { - this.state.serverError = null; - this.setState(this.state); + this.setState({serverError: null}); this.props.onModalDismissed(); } diff --git a/web/react/components/admin_console/team_users.jsx b/web/react/components/admin_console/team_users.jsx index 088a44932..0a971ff15 100644 --- a/web/react/components/admin_console/team_users.jsx +++ b/web/react/components/admin_console/team_users.jsx @@ -33,6 +33,14 @@ export default class UserList extends React.Component { this.getTeamProfiles(this.props.team.id); } + // this.setState({ + // teamId: this.state.teamId, + // users: this.state.users, + // serverError: this.state.serverError, + // showPasswordModal: this.state.showPasswordModal, + // user: this.state.user + // }); + getTeamProfiles(teamId) { Client.getProfilesForTeam( teamId, @@ -56,33 +64,56 @@ export default class UserList extends React.Component { return 0; }); - this.state.users = memberList; - this.setState(this.state); + this.setState({ + teamId: this.state.teamId, + users: memberList, + serverError: this.state.serverError, + showPasswordModal: this.state.showPasswordModal, + user: this.state.user + }); }, (err) => { - this.state.serverError = err.message; - this.state.users = null; - this.setState(this.state); + this.setState({ + teamId: this.state.teamId, + users: null, + serverError: err.message, + showPasswordModal: this.state.showPasswordModal, + user: this.state.user + }); } ); } doPasswordReset(user) { - this.state.showPasswordModal = true; - this.state.user = user; - this.setState(this.state); + this.setState({ + teamId: this.state.teamId, + users: this.state.users, + serverError: this.state.serverError, + showPasswordModal: true, + user + }); } doPasswordResetDismiss() { this.state.showPasswordModal = false; this.state.user = null; - this.setState(this.state); + this.setState({ + teamId: this.state.teamId, + users: this.state.users, + serverError: this.state.serverError, + showPasswordModal: false, + user: null + }); } doPasswordResetSubmit() { - this.state.showPasswordModal = false; - this.state.user = null; - this.setState(this.state); + this.setState({ + teamId: this.state.teamId, + users: this.state.users, + serverError: this.state.serverError, + showPasswordModal: false, + user: null + }); } componentWillReceiveProps(newProps) { diff --git a/web/react/components/admin_console/user_item.jsx b/web/react/components/admin_console/user_item.jsx index ff204e1d9..32812e875 100644 --- a/web/react/components/admin_console/user_item.jsx +++ b/web/react/components/admin_console/user_item.jsx @@ -12,6 +12,7 @@ export default class UserItem extends React.Component { this.handleMakeActive = this.handleMakeActive.bind(this); this.handleMakeNotActive = this.handleMakeNotActive.bind(this); this.handleMakeAdmin = this.handleMakeAdmin.bind(this); + this.handleMakeSystemAdmin = this.handleMakeSystemAdmin.bind(this); this.handleResetPassword = this.handleResetPassword.bind(this); this.state = {}; @@ -75,6 +76,23 @@ export default class UserItem extends React.Component { ); } + handleMakeSystemAdmin(e) { + e.preventDefault(); + const data = { + user_id: this.props.user.id, + new_roles: 'system_admin' + }; + + Client.updateRoles(data, + () => { + this.props.refreshProfiles(); + }, + (err) => { + this.setState({serverError: err.message}); + } + ); + } + handleResetPassword(e) { e.preventDefault(); this.props.doPasswordReset(this.props.user); @@ -101,8 +119,9 @@ export default class UserItem extends React.Component { } const email = user.email; - let showMakeMember = (user.roles === 'admin') || user.roles === 'system_admin'; - let showMakeAdmin = (user.roles === '') || user.roles === 'system_admin'; + let showMakeMember = user.roles === 'admin' || user.roles === 'system_admin'; + let showMakeAdmin = user.roles === '' || user.roles === 'system_admin'; + let showMakeSystemAdmin = user.roles === '' || user.roles === 'admin'; let showMakeActive = false; let showMakeNotActive = user.roles !== 'system_admin'; @@ -111,10 +130,26 @@ export default class UserItem extends React.Component { currentRoles = 'Inactive'; showMakeMember = false; showMakeAdmin = false; + showMakeSystemAdmin = false; showMakeActive = true; showMakeNotActive = false; } + let makeSystemAdmin = null; + if (showMakeSystemAdmin) { + makeSystemAdmin = ( +
  • + + {'Make System Admin'} + +
  • + ); + } + let makeAdmin = null; if (showMakeAdmin) { makeAdmin = ( @@ -206,6 +241,7 @@ export default class UserItem extends React.Component { {makeMember} {makeActive} {makeNotActive} + {makeSystemAdmin}