|
| 1 | +(function executeFixScript() { |
| 2 | + // List of group sys_ids to process |
| 3 | + var groupIds = [ |
| 4 | + 'a715cd759f2002002920bde8132e7018' // Add more sys_ids if needed |
| 5 | + ]; |
| 6 | + |
| 7 | + var groupGR = new GlideRecord('sys_user_group'); |
| 8 | + groupGR.addQuery('sys_id', 'IN', groupIds); |
| 9 | + groupGR.query(); |
| 10 | + |
| 11 | + while (groupGR.next()) { |
| 12 | + gs.info('Processing Group: ' + groupGR.name); |
| 13 | + |
| 14 | + // --- Fetch all roles assigned to this group --- |
| 15 | + var groupRoles = []; |
| 16 | + var groupRoleGR = new GlideRecord('sys_group_has_role'); |
| 17 | + groupRoleGR.addQuery('group', groupGR.sys_id); |
| 18 | + groupRoleGR.query(); |
| 19 | + |
| 20 | + while (groupRoleGR.next()) { |
| 21 | + groupRoles.push(groupRoleGR.role.toString()); |
| 22 | + } |
| 23 | + |
| 24 | + gs.info(' Group Roles: ' + groupRoles.join(', ')); |
| 25 | + |
| 26 | + // --- Get all users in the group --- |
| 27 | + var usersInGroup = []; |
| 28 | + var memberGR = new GlideRecord('sys_user_grmember'); |
| 29 | + memberGR.addQuery('group', groupGR.sys_id); |
| 30 | + memberGR.query(); |
| 31 | + |
| 32 | + while (memberGR.next()) { |
| 33 | + var userGR = memberGR.user.getRefRecord(); |
| 34 | + if (userGR.isValidRecord()) { |
| 35 | + usersInGroup.push({ |
| 36 | + userRecord: userGR, |
| 37 | + memberSysId: memberGR.sys_id |
| 38 | + }); |
| 39 | + } |
| 40 | + } |
| 41 | + |
| 42 | + // --- Validate each user's roles against group roles --- |
| 43 | + for (var i = 0; i < usersInGroup.length; i++) { |
| 44 | + var member = usersInGroup[i]; |
| 45 | + var userGR = member.userRecord; |
| 46 | + |
| 47 | + // Collect all roles assigned to user |
| 48 | + var userRoles = []; |
| 49 | + var userRoleGR = new GlideRecord('sys_user_has_role'); |
| 50 | + userRoleGR.addQuery('user', userGR.sys_id); |
| 51 | + userRoleGR.query(); |
| 52 | + |
| 53 | + while (userRoleGR.next()) { |
| 54 | + userRoles.push(userRoleGR.role.toString()); |
| 55 | + } |
| 56 | + |
| 57 | + // Identify missing roles |
| 58 | + var missingRoles = groupRoles.filter(function(role) { |
| 59 | + return userRoles.indexOf(role) === -1; |
| 60 | + }); |
| 61 | + |
| 62 | + if (missingRoles.length > 0) { |
| 63 | + gs.info(' User ' + userGR.name + ' missing roles: ' + missingRoles.join(', ')); |
| 64 | + gs.info(' Re-adding user to group to refresh roles.'); |
| 65 | + |
| 66 | + // Remove user from the group |
| 67 | + var deleteGR = new GlideRecord('sys_user_grmember'); |
| 68 | + if (deleteGR.get(member.memberSysId)) { |
| 69 | + deleteGR.deleteRecord(); |
| 70 | + } |
| 71 | + |
| 72 | + // Re-add user to group to trigger role re-evaluation |
| 73 | + var newMember = new GlideRecord('sys_user_grmember'); |
| 74 | + newMember.initialize(); |
| 75 | + newMember.group = groupGR.sys_id; |
| 76 | + newMember.user = userGR.sys_id; |
| 77 | + newMember.insert(); |
| 78 | + |
| 79 | + gs.info(' User ' + userGR.name + ' re-added successfully.'); |
| 80 | + } else { |
| 81 | + gs.info(' User ' + userGR.name + ' has all required roles.'); |
| 82 | + } |
| 83 | + } |
| 84 | + |
| 85 | + gs.info('Completed processing group: ' + groupGR.name); |
| 86 | + } |
| 87 | + |
| 88 | + gs.info('Fix Script completed successfully for all specified groups.'); |
| 89 | +})(); |
0 commit comments