-
Notifications
You must be signed in to change notification settings - Fork 175
Expand file tree
/
Copy pathvfolder_v2_rbac.py
More file actions
66 lines (50 loc) · 1.91 KB
/
vfolder_v2_rbac.py
File metadata and controls
66 lines (50 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""RBAC-enforced v2 VFolder delete action.
Delete targets an existing vfolder by ID and uses
``SingleEntityActionProcessor`` with ``single_entity_rbac_validators``.
"""
from __future__ import annotations
import uuid
from dataclasses import dataclass
from typing import override
from ai.backend.common.data.permission.types import RBACElementType
from ai.backend.manager.actions.types import ActionOperationType
from ai.backend.manager.data.permission.types import RBACElementRef
from ai.backend.manager.models.vfolder import VFolderRow
from ai.backend.manager.repositories.base.updater import Updater
from ai.backend.manager.services.vfolder.actions.base import (
VFolderSingleEntityAction,
VFolderSingleEntityActionResult,
)
# ---------------------------------------------------------------------------
# Delete v2 RBAC (single-entity — scope chain resolves project)
# ---------------------------------------------------------------------------
@dataclass
class DeleteVFolderV2RBACAction(VFolderSingleEntityAction):
"""Soft-delete a vfolder by ID with RBAC enforcement."""
vfolder_id: uuid.UUID
updater: Updater[VFolderRow]
@override
def entity_id(self) -> str | None:
return str(self.vfolder_id)
@override
@classmethod
def operation_type(cls) -> ActionOperationType:
return ActionOperationType.DELETE
@override
def target_entity_id(self) -> str:
return str(self.vfolder_id)
@override
def target_element(self) -> RBACElementRef:
return RBACElementRef(
element_type=RBACElementType.VFOLDER,
element_id=str(self.vfolder_id),
)
@dataclass
class DeleteVFolderV2RBACActionResult(VFolderSingleEntityActionResult):
vfolder_id: uuid.UUID
@override
def entity_id(self) -> str | None:
return str(self.vfolder_id)
@override
def target_entity_id(self) -> str:
return str(self.vfolder_id)