@@ -36,6 +36,61 @@ groups := array.concat(
3636 [" " ],
3737)
3838
39+ original_user_group_authorization_policies := [rule |
40+ some rule in policies.authorization
41+ match_original_user_group (rule)
42+ ]
43+
44+ original_user_group_impersonation_policies := [rule |
45+ some rule in policies.impersonation
46+ match_original_user_group (rule)
47+ ]
48+
49+ user_group_catalog_policies := [rule |
50+ some rule in policies.catalogs
51+ match_user_group (rule)
52+ ]
53+
54+ user_group_catalog_session_property_policies := [rule |
55+ some rule in policies.catalog_session_properties
56+ match_user_group (rule)
57+ ]
58+
59+ user_group_function_policies := [rule |
60+ some rule in policies.functions
61+ match_user_group (rule)
62+ ]
63+
64+ user_group_procedure_policies := [rule |
65+ some rule in policies.procedures
66+ match_user_group (rule)
67+ ]
68+
69+ user_group_query_policies := [rule |
70+ some rule in policies.queries
71+ match_user_group (rule)
72+ ]
73+
74+ user_group_schema_policies := [rule |
75+ some rule in policies.schemas
76+ match_user_group (rule)
77+ ]
78+
79+ user_group_system_information_policies := [rule |
80+ some rule in policies.system_information
81+ match_user_group (rule)
82+ ]
83+
84+ user_group_system_session_property_policies := [rule |
85+ some rule in policies.system_session_properties
86+ match_user_group (rule)
87+ ]
88+
89+ user_group_table_policies := [rule |
90+ some rule in policies.tables
91+ match_user_group (rule)
92+ ]
93+
3994default match_any_group (_) := false
4095
4196match_any_group (group_pattern) if {
@@ -65,9 +120,7 @@ match_original_user_group(rule) if {
65120
66121first_matching_authorization_rule (grantee_name) := rule if {
67122 rules := [rule |
68- some rule in policies.authorization
69-
70- match_original_user_group (rule)
123+ some rule in original_user_group_authorization_policies
71124
72125 new_user_pattern := object.get (rule, " new_user" , " .*" )
73126
@@ -85,9 +138,7 @@ authorization_permission(grantee_name) := first_matching_authorization_rule(gran
85138
86139first_matching_catalog_rule (catalog_name) := rule if {
87140 rules := [rule |
88- some rule in policies.catalogs
89-
90- match_user_group (rule)
141+ some rule in user_group_catalog_policies
91142
92143 catalog_pattern := object.get (rule, " catalog" , " .*" )
93144
@@ -111,9 +162,7 @@ first_matching_catalog_session_properties_rule(
111162 property_name,
112163) := rule if {
113164 rules := [rule |
114- some rule in policies.catalog_session_properties
115-
116- match_user_group (rule)
165+ some rule in user_group_catalog_session_property_policies
117166
118167 catalog_pattern := object.get (rule, " catalog" , " .*" )
119168 property_pattern := object.get (rule, " property" , " .*" )
@@ -143,9 +192,7 @@ catalog_visibility(catalog_name) if {
143192catalog_visibility (catalog_name) if {
144193 catalog_access (catalog_name) == {" read-only" }
145194
146- some rule in policies.schemas
147-
148- match_user_group (rule)
195+ some rule in user_group_schema_policies
149196
150197 catalog_pattern := object.get (rule, " catalog" , " .*" )
151198
@@ -159,16 +206,14 @@ catalog_visibility(catalog_name) if {
159206
160207 rules := array.concat (
161208 array.concat (
162- policies.tables ,
163- policies.functions ,
209+ user_group_table_policies ,
210+ user_group_function_policies ,
164211 ),
165- policies.procedures ,
212+ user_group_procedure_policies ,
166213 )
167214
168215 some rule in rules
169216
170- match_user_group (rule)
171-
172217 catalog_pattern := object.get (rule, " catalog" , " .*" )
173218
174219 match_entire (catalog_pattern, catalog_name)
@@ -179,9 +224,7 @@ catalog_visibility(catalog_name) if {
179224catalog_visibility (catalog_name) if {
180225 catalog_access (catalog_name) == {" read-only" }
181226
182- some rule in policies.catalog_session_properties
183-
184- match_user_group (rule)
227+ some rule in user_group_catalog_session_property_policies
185228
186229 catalog_pattern := object.get (rule, " catalog" , " .*" )
187230
@@ -196,9 +239,7 @@ first_matching_function_rule(
196239 function_name,
197240) := rule if {
198241 rules := [rule |
199- some rule in policies.functions
200-
201- match_user_group (rule)
242+ some rule in user_group_function_policies
202243
203244 catalog_pattern := object.get (rule, " catalog" , " .*" )
204245 schema_pattern := object.get (rule, " schema" , " .*" )
@@ -227,9 +268,7 @@ function_privileges(
227268
228269first_matching_impersonation_rule (user) := rule if {
229270 rules := [rule |
230- some rule in policies.impersonation
231-
232- match_original_user_group (rule)
271+ some rule in original_user_group_impersonation_policies
233272
234273 original_user_pattern := object.get (rule, " original_user" , " .*" )
235274 unsubstituted_new_user_pattern := object.get (rule, " new_user" , " .*" )
@@ -280,9 +319,7 @@ first_matching_procedure_rule(
280319 function_name,
281320) := rule if {
282321 rules := [rule |
283- some rule in policies.procedures
284-
285- match_user_group (rule)
322+ some rule in user_group_procedure_policies
286323
287324 catalog_pattern := object.get (rule, " catalog" , " .*" )
288325 schema_pattern := object.get (rule, " schema" , " .*" )
@@ -309,24 +346,15 @@ procedure_privileges(
309346 ).privileges
310347}
311348
312- first_matching_query_rule := rule if {
313- rules := [rule |
314- some rule in policies.queries
315-
316- match_user_group (rule)
317- ]
318- rule := rules[0 ]
319- }
349+ first_matching_query_rule := user_group_query_policies[0 ]
320350
321351default query_access := set ()
322352
323353query_access := {access | some access in first_matching_query_rule.allow}
324354
325355first_matching_query_owned_by_rule (user) := rule if {
326356 rules := [rule |
327- some rule in policies.queries
328-
329- match_user_group (rule)
357+ some rule in user_group_query_policies
330358
331359 query_owner_pattern := object.get (rule, " queryOwner" , " .*" )
332360
@@ -350,9 +378,7 @@ query_owned_by_access(user) := access if {
350378
351379first_matching_schema_rule (catalog_name, schema_name) := rule if {
352380 rules := [rule |
353- some rule in policies.schemas
354-
355- match_user_group (rule)
381+ some rule in user_group_schema_policies
356382
357383 catalog_pattern := object.get (rule, " catalog" , " .*" )
358384 schema_pattern := object.get (rule, " schema" , " .*" )
@@ -383,16 +409,14 @@ schema_visibility(catalog_name, schema_name) if {
383409
384410 rules := array.concat (
385411 array.concat (
386- policies.tables ,
387- policies.functions ,
412+ user_group_table_policies ,
413+ user_group_function_policies ,
388414 ),
389- policies.procedures ,
415+ user_group_procedure_policies ,
390416 )
391417
392418 some rule in rules
393419
394- match_user_group (rule)
395-
396420 catalog_pattern := object.get (rule, " catalog" , " .*" )
397421 match_entire (catalog_pattern, catalog_name)
398422
@@ -423,9 +447,7 @@ first_matching_table_rule(
423447) := rule if {
424448 schema_name != " information_schema"
425449 rules := [rule |
426- some rule in policies.tables
427-
428- match_user_group (rule)
450+ some rule in user_group_table_policies
429451
430452 catalog_pattern := object.get (rule, " catalog" , " .*" )
431453 schema_pattern := object.get (rule, " schema" , " .*" )
@@ -521,14 +543,7 @@ column_access(
521543 access := column.allow
522544}
523545
524- first_matching_system_information_rule := rule if {
525- rules := [rule |
526- some rule in policies.system_information
527-
528- match_user_group (rule)
529- ]
530- rule := rules[0 ]
531- }
546+ first_matching_system_information_rule := user_group_system_information_policies[0 ]
532547
533548default system_information_access := set ()
534549
@@ -538,9 +553,7 @@ system_information_access := {access |
538553
539554first_matching_system_session_properties_rule (property_name) := rule if {
540555 rules := [rule |
541- some rule in policies.system_session_properties
542-
543- match_user_group (rule)
556+ some rule in user_group_system_session_property_policies
544557
545558 property_name_pattern := object.get (rule, " property" , " .*" )
546559
0 commit comments