Skip to content

Commit 2c62d8a

Browse files
fregataaclaude
andauthored
refactor(BA-5046): migrate artifact registry action classes to RBAC base classes (#9992)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent cb08077 commit 2c62d8a

4 files changed

Lines changed: 30 additions & 14 deletions

File tree

changes/9992.enhance.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Refactor artifact registry action classes to RBAC-aware base classes (`ArtifactRegistrySingleEntityAction`) to enable RBAC validator wiring

src/ai/backend/manager/services/artifact_registry/actions/base.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from dataclasses import dataclass
21
from typing import override
32

43
from ai.backend.common.data.permission.types import EntityType
@@ -11,15 +10,13 @@
1110
from ai.backend.manager.actions.action.types import FieldData
1211

1312

14-
@dataclass
1513
class ArtifactRegistryAction(BaseAction):
1614
@override
1715
@classmethod
1816
def entity_type(cls) -> EntityType:
1917
return EntityType.ARTIFACT_REGISTRY
2018

2119

22-
@dataclass
2320
class ArtifactBatchRegistryAction(BaseBatchAction):
2421
@override
2522
@classmethod

src/ai/backend/manager/services/artifact_registry/actions/common/get_meta.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,44 @@
22
from dataclasses import dataclass
33
from typing import override
44

5-
from ai.backend.manager.actions.action import BaseActionResult
5+
from ai.backend.common.data.permission.types import RBACElementType
66
from ai.backend.manager.actions.types import ActionOperationType
77
from ai.backend.manager.data.artifact_registries.types import ArtifactRegistryData
8-
from ai.backend.manager.services.artifact_registry.actions.base import ArtifactRegistryAction
8+
from ai.backend.manager.data.permission.types import RBACElementRef
9+
from ai.backend.manager.errors.api import InvalidAPIParameters
10+
from ai.backend.manager.services.artifact_registry.actions.base import (
11+
ArtifactRegistrySingleEntityAction,
12+
ArtifactRegistrySingleEntityActionResult,
13+
)
914

1015

1116
@dataclass
12-
class GetArtifactRegistryMetaAction(ArtifactRegistryAction):
17+
class GetArtifactRegistryMetaAction(ArtifactRegistrySingleEntityAction):
1318
registry_id: uuid.UUID | None = None
1419
registry_name: str | None = None
1520

16-
@override
17-
def entity_id(self) -> str | None:
18-
return str(self.registry_id)
19-
2021
@override
2122
@classmethod
2223
def operation_type(cls) -> ActionOperationType:
2324
return ActionOperationType.GET
2425

26+
@override
27+
def target_entity_id(self) -> str:
28+
if self.registry_id:
29+
return str(self.registry_id)
30+
if self.registry_name:
31+
return self.registry_name
32+
raise InvalidAPIParameters("Either registry_id or registry_name must be provided.")
33+
34+
@override
35+
def target_element(self) -> RBACElementRef:
36+
return RBACElementRef(RBACElementType.ARTIFACT_REGISTRY, self.target_entity_id())
37+
2538

2639
@dataclass
27-
class GetArtifactRegistryMetaActionResult(BaseActionResult):
40+
class GetArtifactRegistryMetaActionResult(ArtifactRegistrySingleEntityActionResult):
2841
result: ArtifactRegistryData
2942

3043
@override
31-
def entity_id(self) -> str | None:
44+
def target_entity_id(self) -> str:
3245
return str(self.result.id)

src/ai/backend/manager/services/artifact_registry/processors.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class ArtifactRegistryProcessors(AbstractProcessorPackage):
121121
search_reservoir_registries: ActionProcessor[
122122
SearchReservoirRegistriesAction, SearchReservoirRegistriesActionResult
123123
]
124-
get_registry_meta: ActionProcessor[
124+
get_registry_meta: SingleEntityActionProcessor[
125125
GetArtifactRegistryMetaAction, GetArtifactRegistryMetaActionResult
126126
]
127127
get_registry_metas: ActionProcessor[
@@ -192,14 +192,19 @@ def __init__(
192192
validators=[validators.rbac.single_entity],
193193
)
194194

195+
self.get_registry_meta = SingleEntityActionProcessor(
196+
service.get_registry_meta,
197+
action_monitors,
198+
validators=[validators.rbac.single_entity],
199+
)
200+
195201
# Internal/batch actions without RBAC
196202
self.get_huggingface_registries = ActionProcessor(
197203
service.get_huggingface_registries, action_monitors
198204
)
199205
self.get_reservoir_registries = ActionProcessor(
200206
service.get_reservoir_registries, action_monitors
201207
)
202-
self.get_registry_meta = ActionProcessor(service.get_registry_meta, action_monitors)
203208
self.get_registry_metas = ActionProcessor(service.get_registry_metas, action_monitors)
204209

205210
@override

0 commit comments

Comments
 (0)