11module ForestLiana
22 class PermissionsChecker
33 @@permissions_cached = Hash . new
4- @@scopes_cached = Hash . new
4+ @@renderings_cached = Hash . new
55 @@roles_acl_activated = false
66 # TODO: handle cache scopes per rendering
77 @@expiration_in_seconds = ( ENV [ 'FOREST_PERMISSIONS_EXPIRATION_IN_SECONDS' ] || 3600 ) . to_i
@@ -39,13 +39,16 @@ def fetch_permissions
3939 permissions [ 'data' ] = ForestLiana ::PermissionsFormatter . convert_to_new_format ( permissions [ 'data' ] , @rendering_id )
4040 @@permissions_cached [ @rendering_id ] = permissions
4141 end
42+
43+ # NOTICE: Add stats permissions to the RenderingPermissions
44+ permissions [ 'data' ] [ 'renderings' ] [ @rendering_id ] [ 'stats' ] = permissions [ 'stats' ]
4245 add_scopes_to_cache ( permissions )
4346 end
4447
4548 def add_scopes_to_cache ( permissions )
4649 permissions [ 'data' ] [ 'renderings' ] . keys . each { |rendering_id |
47- @@scopes_cached [ rendering_id ] = permissions [ 'data' ] [ 'renderings' ] [ rendering_id ]
48- @@scopes_cached [ rendering_id ] [ 'last_fetch' ] = Time . now
50+ @@renderings_cached [ rendering_id ] = permissions [ 'data' ] [ 'renderings' ] [ rendering_id ]
51+ @@renderings_cached [ rendering_id ] [ 'last_fetch' ] = Time . now
4952 } if permissions [ 'data' ] [ 'renderings' ]
5053 end
5154
@@ -59,8 +62,6 @@ def is_allowed
5962 return stat_with_parameters_allowed?
6063 end
6164
62-
63-
6465 if permissions && permissions [ @collection_name ] &&
6566 permissions [ @collection_name ] [ 'collection' ]
6667 if @permission_name === 'actions'
@@ -83,21 +84,25 @@ def is_allowed
8384 end
8485
8586 def get_scope_in_permissions
86- @@scopes_cached [ @rendering_id ] &&
87- @@scopes_cached [ @rendering_id ] [ @collection_name ] &&
88- @@scopes_cached [ @rendering_id ] [ @collection_name ] [ 'scope' ]
87+ @@renderings_cached [ @rendering_id ] &&
88+ @@renderings_cached [ @rendering_id ] [ @collection_name ] &&
89+ @@renderings_cached [ @rendering_id ] [ @collection_name ] [ 'scope' ]
8990 end
9091
9192 def scope_cache_expired?
92- return true unless @@scopes_cached [ @rendering_id ] && @@scopes_cached [ @rendering_id ] [ 'last_fetch' ]
93+ return true unless @@renderings_cached [ @rendering_id ] && @@renderings_cached [ @rendering_id ] [ 'last_fetch' ]
9394
94- elapsed_seconds = date_difference_in_seconds ( Time . now , @@scopes_cached [ @rendering_id ] [ 'last_fetch' ] )
95+ elapsed_seconds = date_difference_in_seconds ( Time . now , @@renderings_cached [ @rendering_id ] [ 'last_fetch' ] )
9596 elapsed_seconds >= @@expiration_in_seconds
9697 end
9798
9899 # This will happen only on rolesACLActivated (as scope cache will always be up to date on disabled)
99100 def refresh_scope_cache
100101 permissions = ForestLiana ::PermissionsGetter ::get_permissions_for_rendering ( @rendering_id , rendering_specific_only : true )
102+
103+ # NOTICE: Add stats permissions to the RenderingPermissions
104+ permissions [ 'data' ] [ 'renderings' ] [ @rendering_id ] [ 'stats' ] = permissions [ 'stats' ]
105+
101106 add_scopes_to_cache ( permissions )
102107 end
103108
@@ -112,12 +117,12 @@ def get_permissions_content
112117 end
113118
114119 def get_live_query_permissions_content
115- permissions = get_permissions
120+ permissions = @@renderings_cached [ @rendering_id ]
116121 permissions && permissions [ 'stats' ] && permissions [ 'stats' ] [ 'queries' ]
117122 end
118123
119124 def get_stat_with_parameters_content ( statPermissionType )
120- permissions = get_permissions
125+ permissions = @@renderings_cached [ @rendering_id ]
121126 permissions && permissions [ 'stats' ] && permissions [ 'stats' ] [ statPermissionType ]
122127 end
123128
@@ -201,7 +206,7 @@ def have_permissions_expired?
201206 # Used only for testing purpose
202207 def self . empty_cache
203208 @@permissions_cached = Hash . new
204- @@scopes_cached = Hash . new
209+ @@renderings_cached = Hash . new
205210 @@roles_acl_activated = false
206211 @@expiration_in_seconds = ( ENV [ 'FOREST_PERMISSIONS_EXPIRATION_IN_SECONDS' ] || 3600 ) . to_i
207212 end
0 commit comments