diff --git a/backend/models/user.model.js b/backend/models/user.model.js index 1424a3753..715dc9046 100644 --- a/backend/models/user.model.js +++ b/backend/models/user.model.js @@ -36,7 +36,8 @@ const userSchema = mongoose.Schema({ managedProjects: [{ type: String}], // Which projects managed by user. //currentProject: { type: String } // no longer need this as we can get it from Project Team Member table // password: { type: String, required: true } - isActive: { type: Boolean, default: true } + isActive: { type: Boolean, default: true }, + isAdmin: {type: Boolean, default: false} // Signifies if a user is an admin or not }); userSchema.methods.serialize = function () { @@ -67,7 +68,8 @@ userSchema.methods.serialize = function () { githubPublic2FA: this.githubPublic2FA, availability: this.availability, managedProjects: this.managedProjects, - isActive: this.isActive + isActive: this.isActive, + isAdmin: this.isAmdin }; }; diff --git a/client/src/api/UserApiService.js b/client/src/api/UserApiService.js index d0c5506de..a6b16eddf 100644 --- a/client/src/api/UserApiService.js +++ b/client/src/api/UserApiService.js @@ -73,6 +73,22 @@ class UserApiService { alert('server not responding. Please try again.'); } } + + async updateUserDbIsAdmin(userToEdit, isAdmin) { + const url = `${this.baseUserUrl}${userToEdit._id}`; + const requestOptions = { + method: 'PATCH', + headers: this.headers, + body: JSON.stringify({ isAdmin }), + }; + + try { + return await fetch(url, requestOptions); + } catch (err) { + console.error('update is-admin error', err); + alert('server not responding. Please try again.'); + } + } } export default UserApiService; diff --git a/client/src/components/user-admin/EditUsers.jsx b/client/src/components/user-admin/EditUsers.jsx index 1e5f72e93..d5426302c 100644 --- a/client/src/components/user-admin/EditUsers.jsx +++ b/client/src/components/user-admin/EditUsers.jsx @@ -3,10 +3,11 @@ import '../../sass/UserAdmin.scss'; import { FormGroup, FormControlLabel, Switch } from '@mui/material' // child of UserAdmin. Displays form to update users. -const EditUsers = ({ userToEdit, backToSearch, updateUserDb, projects, updateUserActiveStatus }) => { +const EditUsers = ({ userToEdit, backToSearch, updateUserDb, projects, updateUserActiveStatus, updateUserAdminStatus }) => { const [userManagedProjects, setUserManagedProjects] = useState([]); // The projects that the selected user is assigned const [projectValue, setProjectValue] = useState(''); // State and handler for form in EditUsers const [isActive, setIsActive] = useState(userToEdit.isActive); + const [isAdmin, setIsAdmin] = useState(userToEdit.isAdmin); // Prepare data for display const userName = `${userToEdit.name?.firstName} ${userToEdit.name?.lastName}`; @@ -64,6 +65,10 @@ const EditUsers = ({ userToEdit, backToSearch, updateUserDb, projects, updateUse updateUserActiveStatus(userToEdit, !isActive) } + const handleSetIsAdmin = () => { + setIsAdmin(!isAdmin) + updateUserAdminStatus(userToEdit, !isAdmin) + } return (