Introduce update permissions for users
parent
f0ab1cdebb
commit
8ed77eae3b
|
@ -8,10 +8,11 @@ import {
|
||||||
deleteRole as deleteRoleAJAX,
|
deleteRole as deleteRoleAJAX,
|
||||||
updateRoleUsers as updateRoleUsersAJAX,
|
updateRoleUsers as updateRoleUsersAJAX,
|
||||||
updateRolePermissions as updateRolePermissionsAJAX,
|
updateRolePermissions as updateRolePermissionsAJAX,
|
||||||
|
updateUserPermissions as updateUserPermissionsAJAX,
|
||||||
} from 'src/admin/apis'
|
} from 'src/admin/apis'
|
||||||
|
|
||||||
import {killQuery as killQueryProxy} from 'shared/apis/metaQuery'
|
import {killQuery as killQueryProxy} from 'shared/apis/metaQuery'
|
||||||
import {publishNotification} from 'src/shared/actions/notifications';
|
import {publishNotification} from 'src/shared/actions/notifications';
|
||||||
|
|
||||||
import {ADMIN_NOTIFICATION_DELAY} from 'shared/constants'
|
import {ADMIN_NOTIFICATION_DELAY} from 'shared/constants'
|
||||||
|
|
||||||
export const loadUsers = ({users}) => ({
|
export const loadUsers = ({users}) => ({
|
||||||
|
@ -206,3 +207,12 @@ export const updateRolePermissionsAsync = (role, permissions) => async (dispatch
|
||||||
dispatch(publishNotification('error', `Failed to updated role: ${error.data.message}`))
|
dispatch(publishNotification('error', `Failed to updated role: ${error.data.message}`))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const updateUserPermissionsAsync = (user, permissions) => async (dispatch) => {
|
||||||
|
try {
|
||||||
|
await updateUserPermissionsAJAX(user.links.self, permissions)
|
||||||
|
dispatch(publishNotification('success', 'User permissions updated'))
|
||||||
|
} catch (error) {
|
||||||
|
dispatch(publishNotification('error', `Failed to updated user: ${error.data.message}`))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -124,3 +124,17 @@ export const updateRolePermissions = async (url, permissions) => {
|
||||||
console.error(error)
|
console.error(error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const updateUserPermissions = async (url, permissions) => {
|
||||||
|
try {
|
||||||
|
await AJAX({
|
||||||
|
method: 'PATCH',
|
||||||
|
url,
|
||||||
|
data: {
|
||||||
|
permissions,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ const AdminTabs = ({
|
||||||
onFilterUsers,
|
onFilterUsers,
|
||||||
onUpdateRoleUsers,
|
onUpdateRoleUsers,
|
||||||
onUpdateRolePermissions,
|
onUpdateRolePermissions,
|
||||||
|
onUpdateUserPermissions,
|
||||||
}) => {
|
}) => {
|
||||||
let tabs = [
|
let tabs = [
|
||||||
{
|
{
|
||||||
|
@ -42,6 +43,7 @@ const AdminTabs = ({
|
||||||
onEdit={onEditUser}
|
onEdit={onEditUser}
|
||||||
onDelete={onDeleteUser}
|
onDelete={onDeleteUser}
|
||||||
onFilter={onFilterUsers}
|
onFilter={onFilterUsers}
|
||||||
|
onUpdatePermissions={onUpdateUserPermissions}
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
@ -124,6 +126,7 @@ AdminTabs.propTypes = {
|
||||||
onUpdateRoleUsers: func.isRequired,
|
onUpdateRoleUsers: func.isRequired,
|
||||||
onUpdateRolePermissions: func.isRequired,
|
onUpdateRolePermissions: func.isRequired,
|
||||||
hasRoles: bool.isRequired,
|
hasRoles: bool.isRequired,
|
||||||
|
onUpdateUserPermissions: func,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default AdminTabs
|
export default AdminTabs
|
||||||
|
|
|
@ -19,7 +19,12 @@ const UserRow = ({
|
||||||
onSave,
|
onSave,
|
||||||
onCancel,
|
onCancel,
|
||||||
onDelete,
|
onDelete,
|
||||||
|
onUpdatePermissions,
|
||||||
}) => {
|
}) => {
|
||||||
|
const handleUpdatePermissions = (allowed) => {
|
||||||
|
onUpdatePermissions(user, [{scope: 'all', allowed}])
|
||||||
|
}
|
||||||
|
|
||||||
if (isEditing) {
|
if (isEditing) {
|
||||||
return (
|
return (
|
||||||
<tr className="admin-table--edit-row">
|
<tr className="admin-table--edit-row">
|
||||||
|
@ -55,7 +60,7 @@ const UserRow = ({
|
||||||
items={allPermissions}
|
items={allPermissions}
|
||||||
selectedItems={_.get(permissions, ['0', 'allowed'], [])}
|
selectedItems={_.get(permissions, ['0', 'allowed'], [])}
|
||||||
label={permissions && permissions.length ? '' : 'Select Permissions'}
|
label={permissions && permissions.length ? '' : 'Select Permissions'}
|
||||||
onApply={() => '//TODO'}
|
onApply={handleUpdatePermissions}
|
||||||
/> : null
|
/> : null
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
|
@ -93,6 +98,7 @@ UserRow.propTypes = {
|
||||||
onEdit: func,
|
onEdit: func,
|
||||||
onSave: func,
|
onSave: func,
|
||||||
onDelete: func.isRequired,
|
onDelete: func.isRequired,
|
||||||
|
onUpdatePermissions: func,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default UserRow
|
export default UserRow
|
||||||
|
|
|
@ -16,6 +16,7 @@ const UsersTable = ({
|
||||||
onCancel,
|
onCancel,
|
||||||
onDelete,
|
onDelete,
|
||||||
onFilter,
|
onFilter,
|
||||||
|
onUpdatePermissions,
|
||||||
}) => (
|
}) => (
|
||||||
<div className="panel panel-info">
|
<div className="panel panel-info">
|
||||||
<FilterBar type="users" onFilter={onFilter} isEditing={isEditing} onClickCreate={onClickCreate} />
|
<FilterBar type="users" onFilter={onFilter} isEditing={isEditing} onClickCreate={onClickCreate} />
|
||||||
|
@ -45,6 +46,7 @@ const UsersTable = ({
|
||||||
allRoles={allRoles}
|
allRoles={allRoles}
|
||||||
hasRoles={hasRoles}
|
hasRoles={hasRoles}
|
||||||
allPermissions={permissions}
|
allPermissions={permissions}
|
||||||
|
onUpdatePermissions={onUpdatePermissions}
|
||||||
/>) :
|
/>) :
|
||||||
<EmptyRow tableName={'Users'} />
|
<EmptyRow tableName={'Users'} />
|
||||||
}
|
}
|
||||||
|
@ -83,6 +85,7 @@ UsersTable.propTypes = {
|
||||||
allRoles: arrayOf(shape()),
|
allRoles: arrayOf(shape()),
|
||||||
permissions: arrayOf(string),
|
permissions: arrayOf(string),
|
||||||
hasRoles: bool.isRequired,
|
hasRoles: bool.isRequired,
|
||||||
|
onUpdatePermissions: func,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default UsersTable
|
export default UsersTable
|
||||||
|
|
|
@ -17,6 +17,7 @@ import {
|
||||||
deleteRoleAsync,
|
deleteRoleAsync,
|
||||||
updateRoleUsersAsync,
|
updateRoleUsersAsync,
|
||||||
updateRolePermissionsAsync,
|
updateRolePermissionsAsync,
|
||||||
|
updateUserPermissionsAsync,
|
||||||
filterUsers as filterUsersAction,
|
filterUsers as filterUsersAction,
|
||||||
filterRoles as filterRolesAction,
|
filterRoles as filterRolesAction,
|
||||||
} from 'src/admin/actions'
|
} from 'src/admin/actions'
|
||||||
|
@ -47,6 +48,7 @@ class AdminPage extends Component {
|
||||||
this.handleDeleteUser = ::this.handleDeleteUser
|
this.handleDeleteUser = ::this.handleDeleteUser
|
||||||
this.handleUpdateRoleUsers = ::this.handleUpdateRoleUsers
|
this.handleUpdateRoleUsers = ::this.handleUpdateRoleUsers
|
||||||
this.handleUpdateRolePermissions = ::this.handleUpdateRolePermissions
|
this.handleUpdateRolePermissions = ::this.handleUpdateRolePermissions
|
||||||
|
this.handleUpdateUserPermissions = ::this.handleUpdateUserPermissions
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
|
@ -124,6 +126,10 @@ class AdminPage extends Component {
|
||||||
this.props.updateRolePermissions(role, permissions)
|
this.props.updateRolePermissions(role, permissions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleUpdateUserPermissions(user, permissions) {
|
||||||
|
this.props.updateUserPermissions(user, permissions)
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const {users, roles, source, permissions, filterUsers, filterRoles} = this.props
|
const {users, roles, source, permissions, filterUsers, filterRoles} = this.props
|
||||||
const hasRoles = !!source.links.roles
|
const hasRoles = !!source.links.roles
|
||||||
|
@ -167,6 +173,7 @@ class AdminPage extends Component {
|
||||||
onFilterRoles={filterRoles}
|
onFilterRoles={filterRoles}
|
||||||
onUpdateRoleUsers={this.handleUpdateRoleUsers}
|
onUpdateRoleUsers={this.handleUpdateRoleUsers}
|
||||||
onUpdateRolePermissions={this.handleUpdateRolePermissions}
|
onUpdateRolePermissions={this.handleUpdateRolePermissions}
|
||||||
|
onUpdateUserPermissions={this.handleUpdateUserPermissions}
|
||||||
/> :
|
/> :
|
||||||
<span>Loading...</span>
|
<span>Loading...</span>
|
||||||
}
|
}
|
||||||
|
@ -213,6 +220,7 @@ AdminPage.propTypes = {
|
||||||
filterUsers: func,
|
filterUsers: func,
|
||||||
updateRoleUsers: func,
|
updateRoleUsers: func,
|
||||||
updateRolePermissions: func,
|
updateRolePermissions: func,
|
||||||
|
updateUserPermissions: func,
|
||||||
}
|
}
|
||||||
|
|
||||||
const mapStateToProps = ({admin: {users, roles, permissions}}) => ({
|
const mapStateToProps = ({admin: {users, roles, permissions}}) => ({
|
||||||
|
@ -239,6 +247,7 @@ const mapDispatchToProps = (dispatch) => ({
|
||||||
filterRoles: bindActionCreators(filterRolesAction, dispatch),
|
filterRoles: bindActionCreators(filterRolesAction, dispatch),
|
||||||
updateRoleUsers: bindActionCreators(updateRoleUsersAsync, dispatch),
|
updateRoleUsers: bindActionCreators(updateRoleUsersAsync, dispatch),
|
||||||
updateRolePermissions: bindActionCreators(updateRolePermissionsAsync, dispatch),
|
updateRolePermissions: bindActionCreators(updateRolePermissionsAsync, dispatch),
|
||||||
|
updateUserPermissions: bindActionCreators(updateUserPermissionsAsync, dispatch),
|
||||||
})
|
})
|
||||||
|
|
||||||
export default connect(mapStateToProps, mapDispatchToProps)(AdminPage)
|
export default connect(mapStateToProps, mapDispatchToProps)(AdminPage)
|
||||||
|
|
Loading…
Reference in New Issue