File tree Expand file tree Collapse file tree 1 file changed +46
-0
lines changed
Server-Side Components/Script Includes/Role Usage Analyzer Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments