Skip to content

Commit 23e7cc7

Browse files
Create code.js
1 parent bdfbf4d commit 23e7cc7

File tree

1 file changed

+46
-0
lines changed
  • Server-Side Components/Script Includes/Role Usage Analyzer

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
// Role Usage Analyzer using sys_audit
3+
// Description: Identifies roles assigned to users that show no audit activity.
4+
5+
var roleUsageMap = {};
6+
var grUserRole = new GlideRecord('sys_user_has_role');
7+
grUserRole.query();
8+
9+
while (grUserRole.next()) {
10+
var userId = grUserRole.user.toString();
11+
var roleId = grUserRole.role.toString();
12+
13+
if (!roleUsageMap[roleId]) {
14+
roleUsageMap[roleId] = {
15+
users: [],
16+
used: false
17+
};
18+
}
19+
20+
roleUsageMap[roleId].users.push(userId);
21+
}
22+
23+
// Use sys_audit to check user activity in last 90 days
24+
var grAudit = new GlideRecord('sys_audit');
25+
var ninetyDaysAgo = gs.daysAgo(90);
26+
grAudit.addEncodedQuery('userISNOTEMPTY^sys_created_on>=javascript:gs.daysAgo(90)');
27+
grAudit.query();
28+
29+
while (grAudit.next()) {
30+
var userId = grAudit.user.toString();
31+
for (var roleId in roleUsageMap) {
32+
if (roleUsageMap[roleId].users.indexOf(userId) !== -1) {
33+
roleUsageMap[roleId].used = true;
34+
}
35+
}
36+
}
37+
38+
for (var roleId in roleUsageMap) {
39+
if (!roleUsageMap[roleId].used) {
40+
var grRole = new GlideRecord('sys_user_role');
41+
if (grRole.get(roleId)) {
42+
gs.info('[Role Usage Analyzer] Possibly Unused Role: ' + grRole.name + ' | Assigned Users: ' + roleUsageMap[roleId].users.length);
43+
}
44+
}
45+
46+
}

0 commit comments

Comments
 (0)