33from dataclasses import dataclass
44from typing import TYPE_CHECKING , Any , Optional , Union
55
6- from infrahub .core .constants import InfrahubKind
6+ from infrahub .core .constants import InfrahubKind , PermissionDecision
77from infrahub .core .query import Query
88from infrahub .core .registry import registry
99
@@ -21,22 +21,23 @@ class Permission:
2121 id : str
2222 name : str
2323 action : str
24- decision : str
24+ decision : int
2525
2626
2727@dataclass
2828class GlobalPermission (Permission ):
2929 def __str__ (self ) -> str :
30- return f"global:{ self .action } :{ self .decision } "
30+ decision = PermissionDecision (self .decision )
31+ return f"global:{ self .action } :{ decision .name .lower ()} "
3132
3233
3334@dataclass
3435class ObjectPermission (Permission ):
35- branch : str
3636 namespace : str
3737
3838 def __str__ (self ) -> str :
39- return f"object:{ self .branch } :{ self .namespace } :{ self .name } :{ self .action } :{ self .decision } "
39+ decision = PermissionDecision (self .decision )
40+ return f"object:{ self .namespace } :{ self .name } :{ self .action } :{ decision .name .lower ()} "
4041
4142
4243class AccountGlobalPermissionQuery (Query ):
@@ -234,17 +235,6 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: Any) -> None:
234235 RETURN object_permission
235236 }
236237 WITH object_permission
237- CALL {
238- WITH object_permission
239- MATCH (object_permission)-[r1:HAS_ATTRIBUTE]->(:Attribute {name: "branch"})-[r2:HAS_VALUE]->(object_permission_branch:AttributeValue)
240- WHERE all(r IN [r1, r2] WHERE (%(branch_filter)s))
241- WITH object_permission_branch, r1, r2, (r1.status = "active" AND r2.status = "active") AS is_active
242- ORDER BY object_permission_branch.uuid, r2.branch_level DESC, r2.from DESC, r1.branch_level DESC, r1.from DESC
243- WITH object_permission_branch, head(collect(is_active)) as latest_is_active
244- WHERE latest_is_active = TRUE
245- RETURN object_permission_branch
246- }
247- WITH object_permission, object_permission_branch
248238
249239 CALL {
250240 WITH object_permission
@@ -254,7 +244,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: Any) -> None:
254244 ORDER BY r2.branch_level DESC, r2.from DESC, r1.branch_level DESC, r1.from DESC
255245 LIMIT 1
256246 }
257- WITH object_permission, object_permission_branch, object_permission_namespace, is_active AS opn_is_active
247+ WITH object_permission, object_permission_namespace, is_active AS opn_is_active
258248 WHERE opn_is_active = TRUE
259249 CALL {
260250 WITH object_permission
@@ -264,7 +254,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: Any) -> None:
264254 ORDER BY r2.branch_level DESC, r2.from DESC, r1.branch_level DESC, r1.from DESC
265255 LIMIT 1
266256 }
267- WITH object_permission, object_permission_branch, object_permission_namespace, object_permission_name, is_active AS opn_is_active
257+ WITH object_permission, object_permission_namespace, object_permission_name, is_active AS opn_is_active
268258 WHERE opn_is_active = TRUE
269259 CALL {
270260 WITH object_permission
@@ -274,7 +264,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: Any) -> None:
274264 ORDER BY r2.branch_level DESC, r2.from DESC, r1.branch_level DESC, r1.from DESC
275265 LIMIT 1
276266 }
277- WITH object_permission, object_permission_branch, object_permission_namespace, object_permission_name, object_permission_action, is_active AS opa_is_active
267+ WITH object_permission, object_permission_namespace, object_permission_name, object_permission_action, is_active AS opa_is_active
278268 WHERE opa_is_active = TRUE
279269 CALL {
280270 WITH object_permission
@@ -284,7 +274,7 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: Any) -> None:
284274 ORDER BY r2.branch_level DESC, r2.from DESC, r1.branch_level DESC, r1.from DESC
285275 LIMIT 1
286276 }
287- WITH object_permission, object_permission_branch, object_permission_namespace, object_permission_name, object_permission_action, object_permission_decision, is_active AS opd_is_active
277+ WITH object_permission, object_permission_namespace, object_permission_name, object_permission_action, object_permission_decision, is_active AS opd_is_active
288278 WHERE opd_is_active = TRUE
289279 """ % {
290280 "branch_filter" : branch_filter ,
@@ -298,7 +288,6 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: Any) -> None:
298288
299289 self .return_labels = [
300290 "object_permission" ,
301- "object_permission_branch" ,
302291 "object_permission_namespace" ,
303292 "object_permission_name" ,
304293 "object_permission_action" ,
@@ -311,7 +300,6 @@ def get_permissions(self) -> list[ObjectPermission]:
311300 permissions .append (
312301 ObjectPermission (
313302 id = result .get ("object_permission" ).get ("uuid" ),
314- branch = result .get ("object_permission_branch" ).get ("value" ),
315303 namespace = result .get ("object_permission_namespace" ).get ("value" ),
316304 name = result .get ("object_permission_name" ).get ("value" ),
317305 action = result .get ("object_permission_action" ).get ("value" ),
0 commit comments