Skip to content

Commit f1ac9b0

Browse files
fregataaclaude
andcommitted
feat(BA-2476): add RBAC validators to project action processors
Add RBAC validators to ScopeActionProcessor and SingleEntityActionProcessor for project-related actions in the group service. Changes: - Pass validators.rbac.scope to ScopeActionProcessor for: - create_group, search_projects_by_domain, search_projects_by_user - Pass validators.rbac.single_entity to SingleEntityActionProcessor for: - modify_group, delete_group, purge_group, get_project - Internal/admin actions (usage_per_month, usage_per_period, search_projects) remain on plain ActionProcessor without RBAC validators Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent b018c03 commit f1ac9b0

1 file changed

Lines changed: 21 additions & 7 deletions

File tree

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

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,20 +64,34 @@ def __init__(
6464
action_monitors: list[ActionMonitor],
6565
validators: ActionValidators,
6666
) -> None:
67-
self.create_group = ScopeActionProcessor(group_service.create_group, action_monitors)
68-
self.modify_group = SingleEntityActionProcessor(group_service.modify_group, action_monitors)
69-
self.delete_group = SingleEntityActionProcessor(group_service.delete_group, action_monitors)
70-
self.purge_group = SingleEntityActionProcessor(group_service.purge_group, action_monitors)
67+
self.create_group = ScopeActionProcessor(
68+
group_service.create_group, action_monitors, validators=[validators.rbac.scope]
69+
)
70+
self.modify_group = SingleEntityActionProcessor(
71+
group_service.modify_group, action_monitors, validators=[validators.rbac.single_entity]
72+
)
73+
self.delete_group = SingleEntityActionProcessor(
74+
group_service.delete_group, action_monitors, validators=[validators.rbac.single_entity]
75+
)
76+
self.purge_group = SingleEntityActionProcessor(
77+
group_service.purge_group, action_monitors, validators=[validators.rbac.single_entity]
78+
)
7179
self.usage_per_month = ActionProcessor(group_service.usage_per_month, action_monitors)
7280
self.usage_per_period = ActionProcessor(group_service.usage_per_period, action_monitors)
7381
self.search_projects = ActionProcessor(group_service.search_projects, action_monitors)
7482
self.search_projects_by_domain = ScopeActionProcessor(
75-
group_service.search_projects_by_domain, action_monitors
83+
group_service.search_projects_by_domain,
84+
action_monitors,
85+
validators=[validators.rbac.scope],
7686
)
7787
self.search_projects_by_user = ScopeActionProcessor(
78-
group_service.search_projects_by_user, action_monitors
88+
group_service.search_projects_by_user,
89+
action_monitors,
90+
validators=[validators.rbac.scope],
91+
)
92+
self.get_project = SingleEntityActionProcessor(
93+
group_service.get_project, action_monitors, validators=[validators.rbac.single_entity]
7994
)
80-
self.get_project = SingleEntityActionProcessor(group_service.get_project, action_monitors)
8195

8296
@override
8397
def supported_actions(self) -> list[ActionSpec]:

0 commit comments

Comments
 (0)