diff --git a/Client-Side Components/UI Actions/Group Membership Admin Util/README.md b/Client-Side Components/UI Actions/Group Membership Admin Util/README.md new file mode 100644 index 0000000000..68ab60055f --- /dev/null +++ b/Client-Side Components/UI Actions/Group Membership Admin Util/README.md @@ -0,0 +1,40 @@ +# Group Membership Utility + +The **Group Membership Utility** is a ServiceNow server-side tool designed to streamline the management of user membership in assignment groups. It provides administrators with two UI actions on the Assignment Group table to add or remove themselves from a group, ensuring efficient group membership management. Super helpful when doing group membership testing. + +## Challenge + +Managing assignment group memberships manually can be time-consuming and frustrating when doing group change related testings. + +## Features + +- **Add Me**: Adds the current user to the selected assignment group, ensuring quick inclusion. +- **Remove Me**: Removes the current user from the selected assignment group, simplifying group updates. +- **Admin-Only Visibility**: Both actions are restricted to users with administrative privileges i.e admin user role, ensuring controlled access. + +## Functionality + +The Group Membership Utility provides the following capabilities: +- Detects the current user's membership status in the selected group. +- Dynamically enables or disables the **Add Me** and **Remove Me** actions based on the user's membership. +- Ensures visibility of these actions only for users with administrative privileges. + +## Visibility + +Add below condition script for the "Add Me" UI action +```javascript +gs.hasRole('admin') && !gs.getUser().isMemberOf(current.sys_id); +``` +Add below condition script for the "Remove Me" UI action +```javascript +gs.hasRole('admin') && gs.getUser().isMemberOf(current.sys_id); +``` + +## Usage Instructions + +1. Navigate to the Assignment Group table. +2. Select a group. +3. Use the **Add Me** button to add yourself to the group if you're not already a member. +4. Use the **Remove Me** button to remove yourself from the group if you're already a member. + + diff --git a/Client-Side Components/UI Actions/Group Membership Admin Util/addMeUIActionScript.js b/Client-Side Components/UI Actions/Group Membership Admin Util/addMeUIActionScript.js new file mode 100644 index 0000000000..348c46fbc0 --- /dev/null +++ b/Client-Side Components/UI Actions/Group Membership Admin Util/addMeUIActionScript.js @@ -0,0 +1,26 @@ +try { + var groupSysId = current.sys_id; + var userSysId = gs.getUserID(); + + // Validate input + if (!groupSysId || !userSysId) { + throw new Error("Group Sys ID and User Sys ID are required."); + } + + // Create a new record in the sys_user_grmember table + var gr = new GlideRecord("sys_user_grmember"); + gr.initialize(); + gr.group = groupSysId; + gr.user = userSysId; + var sysId = gr.insert(); + + if (sysId) { + gs.addInfoMessage( + "User successfully added to the group. Record Sys ID: " + sysId + ); + } else { + throw new Error("Failed to add user to the group."); + } +} catch (error) { + gs.addErrorMessage("Error adding user to group: " + error.message); +} diff --git a/Client-Side Components/UI Actions/Group Membership Admin Util/removeMeUIActionScript.js b/Client-Side Components/UI Actions/Group Membership Admin Util/removeMeUIActionScript.js new file mode 100644 index 0000000000..378b8b2d40 --- /dev/null +++ b/Client-Side Components/UI Actions/Group Membership Admin Util/removeMeUIActionScript.js @@ -0,0 +1,29 @@ +try { + var groupSysId = current.sys_id; + var userSysId = gs.getUserID(); + + // Validate input + if (!groupSysId || !userSysId) { + throw new Error("Group Sys ID and User Sys ID are required."); + } + + // Query the sys_user_grmember table to find the record + var gr = new GlideRecord("sys_user_grmember"); + gr.addQuery("group", groupSysId); + gr.addQuery("user", userSysId); + gr.query(); + + if (gr.next()) { + // Delete the record + var deleted = gr.deleteRecord(); + if (deleted) { + gs.addInfoMessage("User successfully removed from the group."); + } else { + throw new Error("Failed to remove user from the group."); + } + } else { + throw new Error("No matching record found for the user in the group."); + } +} catch (error) { + gs.addErrorMessage("Error removing user from group: " + error.message); +} \ No newline at end of file