Skip to content

Commit fb2b637

Browse files
fregataaclaude
andcommitted
test(BA-5797): add repository unit tests for resolve_effective_permissions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 291c723 commit fb2b637

4 files changed

Lines changed: 901 additions & 6 deletions

File tree

src/ai/backend/manager/data/permission/role.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import uuid
4+
from collections.abc import Mapping
45
from dataclasses import dataclass, field
56
from datetime import datetime
67

@@ -113,7 +114,7 @@ class EffectivePermissionsInput:
113114
class EffectivePermissionsResult:
114115
"""Mapping from entity ID to the set of operations the user is authorized to perform."""
115116

116-
permissions: dict[str, set[OperationType]]
117+
permissions: Mapping[str, set[OperationType]]
117118

118119

119120
@dataclass(frozen=True)

src/ai/backend/manager/repositories/permission_controller/db_source/db_source.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
22
import uuid
3+
from collections import defaultdict
34
from collections.abc import Collection, Iterable, Sequence
45
from dataclasses import dataclass, field
56
from typing import Any, cast
@@ -1164,7 +1165,7 @@ async def resolve_effective_permissions(
11641165

11651166
combined_query = sa.union_all(scope_chain_query, self_scope_query)
11661167

1167-
permissions: dict[str, set[OperationType]] = {eid: set() for eid in data.target_entity_ids}
1168+
permissions: defaultdict[str, set[OperationType]] = defaultdict(set)
11681169
async with self._db.begin_readonly_session_read_committed() as db_session:
11691170
result = await db_session.execute(combined_query)
11701171
for row in result:

src/ai/backend/manager/services/permission_contoller/actions/resolve_effective_permissions.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
from __future__ import annotations
22

3+
from collections.abc import Mapping
34
from dataclasses import dataclass, field
45
from typing import override
56
from uuid import UUID
67

78
from ai.backend.common.data.permission.types import EntityType, OperationType, RBACElementType
8-
from ai.backend.manager.actions.action import BaseActionResult
9+
from ai.backend.manager.actions.action import BaseAction, BaseActionResult
910
from ai.backend.manager.actions.types import ActionOperationType
10-
from ai.backend.manager.services.permission_contoller.actions.base import RoleAction
1111

1212

1313
@dataclass
14-
class ResolveEffectivePermissionsAction(RoleAction):
14+
class ResolveEffectivePermissionsAction(BaseAction):
1515
"""Action to resolve effective permissions per entity for a given user.
1616
1717
Given a user ID, an element type, and a list of entity IDs, returns the
@@ -28,6 +28,11 @@ class ResolveEffectivePermissionsAction(RoleAction):
2828
def entity_id(self) -> str | None:
2929
return str(self.user_id)
3030

31+
@override
32+
@classmethod
33+
def entity_type(cls) -> EntityType:
34+
return EntityType.PERMISSION
35+
3136
@override
3237
@classmethod
3338
def operation_type(cls) -> ActionOperationType:
@@ -38,7 +43,7 @@ def operation_type(cls) -> ActionOperationType:
3843
class ResolveEffectivePermissionsActionResult(BaseActionResult):
3944
"""Result containing the effective permissions per entity."""
4045

41-
permissions: dict[str, set[OperationType]] = field(default_factory=dict)
46+
permissions: Mapping[str, set[OperationType]] = field(default_factory=dict)
4247

4348
@override
4449
def entity_id(self) -> str | None:

0 commit comments

Comments
 (0)