Skip to content

Commit 5a51c46

Browse files
test: Pre-compute the user/group policies
1 parent 26853f4 commit 5a51c46

1 file changed

Lines changed: 75 additions & 62 deletions

File tree

tests/templates/kuttl/opa-authorization/trino_rules/trino/actual_permissions.rego

Lines changed: 75 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
3994
default match_any_group(_) := false
4095

4196
match_any_group(group_pattern) if {
@@ -65,9 +120,7 @@ match_original_user_group(rule) if {
65120

66121
first_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

86139
first_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 {
143192
catalog_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 {
179224
catalog_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

228269
first_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

321351
default query_access := set()
322352

323353
query_access := {access | some access in first_matching_query_rule.allow}
324354

325355
first_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

351379
first_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

533548
default system_information_access := set()
534549

@@ -538,9 +553,7 @@ system_information_access := {access |
538553

539554
first_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

Comments
 (0)