From c550d66826355dbf27c77b27534ebb4bcd68d5ec Mon Sep 17 00:00:00 2001 From: ttipo Date: Mon, 22 Jun 2026 14:13:53 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=97=85=EB=AC=B4=20=EC=9E=91=EC=84=B1/?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=ED=99=94=EB=A9=B4=20=EC=A7=84=EC=9E=85?= =?UTF-8?q?=EC=9D=84=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EC=9E=90=EB=A1=9C=20=EC=A0=9C=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 비관리자가 URL 로 직접 진입해도 폼이 열리던 문제 수정 — 프로젝트 로드 후 canManage 가 아니면 경고 후 프로젝트 상세로 리다이렉트. 생성·수정 모두 백엔드 admin 전용과 일치시킨다. Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/src/pages/relay/TaskCreatePage.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/pages/relay/TaskCreatePage.vue b/frontend/src/pages/relay/TaskCreatePage.vue index b543e8f..95c627e 100644 --- a/frontend/src/pages/relay/TaskCreatePage.vue +++ b/frontend/src/pages/relay/TaskCreatePage.vue @@ -64,6 +64,12 @@ const repo = ref(null) async function loadProject() { try { repo.value = await projectStore.fetchOne(projectId.value) + // 업무 작성/수정은 프로젝트 관리자만 가능 — 일반 멤버는 진입 즉시 상세로 돌려보낸다 + // (백엔드도 admin 전용이지만, 폼 화면 자체를 열지 못하게 막는다) + if (repo.value && !repo.value.canManage) { + void dialog.alert('업무 작성은 프로젝트 관리자만 가능합니다.', { variant: 'warning' }) + await router.replace(`/projects/${projectId.value}`) + } } catch { repo.value = null }