diff --git a/src/pages/TaskDetailPage.tsx b/src/pages/TaskDetailPage.tsx index 72a4264..3469d6a 100644 --- a/src/pages/TaskDetailPage.tsx +++ b/src/pages/TaskDetailPage.tsx @@ -88,13 +88,27 @@ export default function TaskDetailPage() { () => members.find((m) => m.user_id === user?.id)?.role, [members, user?.id] ) - const canEditTask = Boolean(task && project && user && ( + const isAdmin = Boolean(user && ( user.is_admin || - user.id === project.owner_id || - user.id === task.created_by_id || - user.id === milestone?.created_by_id || + (project && user.id === project.owner_id) || currentMemberRole === 'admin' )) + // P5.7/P9.3: assignee-aware edit permission + const canEditTask = Boolean(task && project && user && (() => { + const st = task.status + // undergoing/completed/closed: no body edits + if (st === 'undergoing' || st === 'completed' || st === 'closed') return false + // open + assignee set: only assignee or admin + if (st === 'open' && task.assignee_id != null) { + return user.id === task.assignee_id || isAdmin + } + // open + no assignee, or pending: general permission + return ( + isAdmin || + user.id === task.created_by_id || + user.id === milestone?.created_by_id + ) + })()) if (!task) return
Loading...
@@ -113,7 +127,7 @@ export default function TaskDetailPage() { {task.task_type}{task.task_subtype && {task.task_subtype}} {task.tags && {task.tags}} - {canEditTask && !isTerminal && task.status !== 'undergoing' && ( + {canEditTask && ( )}