Skip to content

Commit 32e947c

Browse files
Remove Inactive and locked out users from All Groups and Roles.js
Removing roles and group access from dormant users is a critical security and compliance best practice — it reduces the attack surface and prevents unauthorized access.
1 parent 8dc35c2 commit 32e947c

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Number of days threshold
2+
var daysThreshold = 90;
3+
var cutoffDate = new GlideDateTime();
4+
cutoffDate.addDaysUTC(-daysThreshold);
5+
6+
gs.info('🔍 Starting cleanup of inactive and locked out users since: ' + cutoffDate);
7+
8+
// Query users inactive, locked out, and not updated in last 90 days
9+
var userGR = new GlideRecord('sys_user');
10+
userGR.addQuery('active', false);
11+
userGR.addQuery('locked_out', true);
12+
userGR.addQuery('sys_updated_on', '<=', cutoffDate);
13+
userGR.query();
14+
15+
var userCount = 0;
16+
17+
while (userGR.next()) {
18+
var userSysId = userGR.getUniqueValue();
19+
var userName = userGR.name;
20+
21+
gs.info('🧹 Cleaning up user: ' + userName + ' (' + userSysId + ')');
22+
23+
// Remove from all groups
24+
var groupMemberGR = new GlideRecord('sys_user_grmember');
25+
groupMemberGR.addQuery('user', userSysId);
26+
groupMemberGR.query();
27+
while (groupMemberGR.next()) {
28+
gs.info('❌ Removing user from group: ' + groupMemberGR.group.name);
29+
groupMemberGR.deleteRecord();
30+
}
31+
32+
// Remove all roles
33+
var roleGR = new GlideRecord('sys_user_has_role');
34+
roleGR.addQuery('user', userSysId);
35+
roleGR.query();
36+
while (roleGR.next()) {
37+
gs.info('❌ Removing role: ' + roleGR.role.name);
38+
roleGR.deleteRecord();
39+
}
40+
41+
userCount++;
42+
}
43+
44+
gs.info('✅ Cleanup complete. Total users processed: ' + userCount);

0 commit comments

Comments
 (0)