P2-1: 移除 projects.py 中重复的 _require_workspace_member 函数,使用 permissions.py 中的共享函数

This commit is contained in:
2026-06-26 18:34:41 +08:00
parent 3c54dcbef4
commit d5bc23d488
+4 -13
View File
@@ -7,6 +7,7 @@ from app.schemas.project import (
ListProjectsResponse,
ProjectResponse,
)
from app.api.routes.permissions import require_workspace_member
from fastapi import APIRouter, Depends, HTTPException, status
from packages.application import (
@@ -20,16 +21,6 @@ from packages.ports.workspace_member_repository import WorkspaceMemberRepository
router = APIRouter()
def _require_workspace_member(
workspace_id: str,
authenticated_user: AuthenticatedUser,
workspace_member_repository: WorkspaceMemberRepository,
) -> None:
member = workspace_member_repository.find_by_workspace_and_user(workspace_id, authenticated_user.user.id)
if member is None:
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Workspace access denied")
def _to_project_response(item) -> ProjectResponse:
return ProjectResponse(
id=item.id,
@@ -50,7 +41,7 @@ def get_project(
project = use_case.execute(project_id)
if project is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Project not found")
_require_workspace_member(project.workspace_id, authenticated_user, workspace_member_repository)
require_workspace_member(project.workspace_id, authenticated_user, workspace_member_repository)
return _to_project_response(project)
@@ -61,7 +52,7 @@ def list_projects(
project_repository: Any = Depends(get_project_repository),
workspace_member_repository: WorkspaceMemberRepository = Depends(get_workspace_member_repository),
) -> ListProjectsResponse:
_require_workspace_member(workspace_id, authenticated_user, workspace_member_repository)
require_workspace_member(workspace_id, authenticated_user, workspace_member_repository)
use_case = ListProjectsUseCase(project_repository)
projects = use_case.execute(workspace_id)
return ListProjectsResponse(items=[_to_project_response(item) for item in projects])
@@ -74,7 +65,7 @@ def create_project(
project_repository: Any = Depends(get_project_repository),
workspace_member_repository: WorkspaceMemberRepository = Depends(get_workspace_member_repository),
) -> ProjectResponse:
_require_workspace_member(request.workspace_id, authenticated_user, workspace_member_repository)
require_workspace_member(request.workspace_id, authenticated_user, workspace_member_repository)
use_case = CreateProjectUseCase(project_repository)
project = use_case.execute(
CreateProjectCommand(