From ecd0d6d6b7491d9a52c3a61806978a13eed57549 Mon Sep 17 00:00:00 2001 From: Daniil Palagin Date: Thu, 5 Sep 2024 20:15:51 +0200 Subject: [PATCH] [#202] Implement EDIT_USERS role logic --- src/components/user/User.jsx | 39 ++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/components/user/User.jsx b/src/components/user/User.jsx index 24f27783..787a8782 100644 --- a/src/components/user/User.jsx +++ b/src/components/user/User.jsx @@ -4,14 +4,14 @@ import withI18n from "../../i18n/withI18n"; import { injectIntl } from "react-intl"; import HorizontalInput from "../HorizontalInput"; import UserValidator from "../../validation/UserValidator"; -import { ACTION_STATUS, GROUP, ROLE_TYPE } from "../../constants/DefaultConstants"; +import { ACTION_STATUS, GROUP, ROLE, ROLE_TYPE } from "../../constants/DefaultConstants"; import { processInstitutions } from "../../utils/Utils"; import { LoaderCard, LoaderSmall } from "../Loader"; import HelpIcon from "../HelpIcon"; import PropTypes from "prop-types"; import { FaRandom } from "react-icons/fa"; import { isUsingOidcAuth } from "../../utils/OidcUtils"; -import { getRoles, isAdmin, roleToType } from "../../utils/SecurityUtils"; +import { getRoles, hasRole, isAdmin, roleToType } from "../../utils/SecurityUtils"; import RoleSelector from "../../RoleSelector.jsx"; class User extends React.Component { @@ -245,7 +245,11 @@ class User extends React.Component { type="text" name="firstName" label={`${this.i18n("user.first-name")}*`} - disabled={(!isAdmin(currentUser) && currentUser.username !== user.username) || isUsingOidcAuth()} + disabled={ + (currentUser.username !== user.username && + (!isAdmin(currentUser) || !hasRole(currentUser, ROLE.EDIT_USERS))) || + isUsingOidcAuth() + } value={user.firstName} labelWidth={3} inputWidth={8} @@ -257,7 +261,11 @@ class User extends React.Component { type="text" name="lastName" label={`${this.i18n("user.last-name")}*`} - disabled={(!isAdmin(currentUser) && currentUser.username !== user.username) || isUsingOidcAuth()} + disabled={ + (currentUser.username !== user.username && + (!isAdmin(currentUser) || !hasRole(currentUser, ROLE.EDIT_USERS))) || + isUsingOidcAuth() + } value={user.lastName} labelWidth={3} inputWidth={8} @@ -284,7 +292,11 @@ class User extends React.Component { type="email" name="emailAddress" label={`${this.i18n("users.email")}*`} - disabled={(!isAdmin(currentUser) && currentUser.username !== user.username) || isUsingOidcAuth()} + disabled={ + (currentUser.username !== user.username && + (!isAdmin(currentUser) || !hasRole(currentUser, ROLE.EDIT_USERS))) || + isUsingOidcAuth() + } value={user.emailAddress} labelWidth={3} inputWidth={8} @@ -298,7 +310,11 @@ class User extends React.Component { type="select" name="group" label={`${this.i18n("user.group")}*`} - disabled={(!isAdmin(currentUser) && currentUser.username !== user.username) || isUsingOidcAuth()} + disabled={ + !isAdmin(currentUser) || + (currentUser.username !== user.username && !hasRole(currentUser, ROLE.EDIT_USERS)) || + isUsingOidcAuth() + } value={user.group} labelWidth={3} inputWidth={8} @@ -314,7 +330,10 @@ class User extends React.Component { name="institution" label={`${this.i18n("institution.panel-title")}*`} onChange={this._onInstitutionSelected} - disabled={!isAdmin(currentUser)} + disabled={ + !isAdmin(currentUser) || + (currentUser.username !== user.username && !hasRole(currentUser, ROLE.EDIT_USERS)) + } value={user.institution ? user.institution.uri : ""} labelWidth={3} inputWidth={8} @@ -343,7 +362,11 @@ class User extends React.Component {