File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed
Server-Side Components/Scheduled Jobs/Role Usage Analyzer Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 1+
2+ // Role Usage Analyzer Script
3+ // Description: Identifies roles assigned to users that may be unused.
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+ var grHistory = new GlideRecord ( 'sys_history_line' ) ;
24+ grHistory . addQuery ( 'user' , 'ISNOTEMPTY' ) ;
25+ grHistory . query ( ) ;
26+
27+ while ( grHistory . next ( ) ) {
28+ var userId = grHistory . user . toString ( ) ;
29+ for ( var roleId in roleUsageMap ) {
30+ if ( roleUsageMap [ roleId ] . users . indexOf ( userId ) !== - 1 ) {
31+ roleUsageMap [ roleId ] . used = true ;
32+ }
33+ }
34+ }
35+
36+ for ( var roleId in roleUsageMap ) {
37+ if ( ! roleUsageMap [ roleId ] . used ) {
38+ var grRole = new GlideRecord ( 'sys_user_role' ) ;
39+ if ( grRole . get ( roleId ) ) {
40+ gs . info ( '[Role Usage Analyzer] Unused Role: ' + grRole . name + ' | Assigned to Users: ' + roleUsageMap [ roleId ] . users . length ) ;
41+ }
42+ }
43+ }
You can’t perform that action at this time.
0 commit comments