- 시스템 관리 회사(.env 관리자 계정 소속 회사) 소속은 전원 시스템관리자 — 서버 시작 시 일괄 반영, 가입 승인·팀원 등록 시에도 자동 부여 - 이미 소속이 있는 사용자의 회사 가입 재신청 차단 (기존: 신청 즉시 소속 해제·승인대기 전락) - 회사관리자에게 자기 회사 역할 변경·프로젝트 삭제 허용, 마지막 관리자 강등 차단 - 역할 변경 시 is_master 동반 조정 (권한 판정 불일치 제거) - 일반사용자도 소속 회사 프로젝트 전체 열람 (수정 권한은 별개) - 대시보드 시스템 로그 섹션 최하단 이동 - PLAN.md 에 B01 정비 계획 반영 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
29 lines
1.4 KiB
TypeScript
29 lines
1.4 KiB
TypeScript
import type { DashboardUser, ProjectItem, Member } from "./B01_Dashboard_Api_Fetch";
|
|
|
|
export function canEditProject(user: DashboardUser, _project: ProjectItem): boolean {
|
|
if (user.role === "SYSTEM_ADMIN") return true;
|
|
if (user.role === "ADMIN") return user.company_id !== null;
|
|
return false; // USER는 수정 불가
|
|
}
|
|
|
|
export function canDeleteProject(user: DashboardUser): boolean {
|
|
// 회사 관리자도 자기 회사 프로젝트를 지운다 (2026-09-06 사용자 확정). 범위는 백엔드가 다시 본다.
|
|
return user.role === "SYSTEM_ADMIN" || (user.role === "ADMIN" && user.company_id !== null);
|
|
}
|
|
|
|
export function canAddUser(user: DashboardUser): boolean {
|
|
return user.role === "SYSTEM_ADMIN" || user.role === "ADMIN";
|
|
}
|
|
|
|
export function canChangeRole(user: DashboardUser, _targetUser: Member | DashboardUser): boolean {
|
|
// 회사 관리자도 자기 회사 안에서 역할을 바꾼다 (2026-09-06 사용자 확정).
|
|
// 마지막 관리자 이탈·시스템 관리자 변경은 백엔드가 막는다.
|
|
return user.role === "SYSTEM_ADMIN" || (user.role === "ADMIN" && user.company_id !== null);
|
|
}
|
|
|
|
export function canDeleteUser(user: DashboardUser, _targetUser: Member | DashboardUser): boolean {
|
|
if (user.role === "SYSTEM_ADMIN") return true;
|
|
// ADMIN은 본인 회사의 멤버만 삭제 가능
|
|
return user.role === "ADMIN" && user.company_id !== null;
|
|
}
|