HBSA270_Platform Staff (플랫폼 스태프·엔드포인트별)
(Hereby) 시스템 관리 > [[HBSA200]] > Platform Staff
| 앱 | System Admin (포트 4100) |
| 부모 화면 | [[HBSA200]] |
| 대상 사용자 | 플랫폼 운영자(OPERATOR) |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_권한(RBAC)]] |
| Status | draft (코드 기반 — 라이브 실사 불가: dev 라우트 AccessDenied 격리, 2026-08-25 확인) |
| Owner | 카나 |
개요
벤더 플랫폼 스태프(meta account)의 platformRole(OPERATOR/SUPPORT)을 부여·해제하고, 새 엔드포인트에 스태프 계정 자체를 생성한다(§5-2⑴). 계정은 엔드포인트(독립 인증 realm)마다 별개라 대상 엔드포인트 선택 축이 있다. env 부트스트랩(OPERATOR 전무 시 1명) → 콘솔 생성(2번째부터)의 2단 구조를 완성하는 화면.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-08-25 | 카나 | 콸 | 최초 작성 (redesign PR #583 코드 census 기반, 라이브 미실사) |
| 2026-10-02 | 카나 | PM | #995 비밀번호 최소 길이 병원 설정 연동 — repo 직접 수정 역수용(c6347029, #995) - 카나/PM |
Data I/O
Client → Server
| 액션 | 콘솔 REST | systemProcedure |
|---|---|---|
| 스태프 목록/검색 | GET /api/platform-accounts (?endpoint=) | systemPlatformAccounts |
| 역할 부여/해제 | PATCH /api/platform-accounts/:id/role | systemSetPlatformRole |
| 스태프 계정 생성 | POST /api/platform-accounts | systemCreatePlatformStaff(계정 생성+역할 부여 원샷) |
Server → Client
| 변수 | 소스 | 비고 |
|---|---|---|
platformAccounts[] | systemPlatformAccounts | email/name/status/platformRole/lastLoginAt |
platformListMode | staff / search | 목록 vs 검색 결과 |
endpoints[] | 레지스트리 | 다중 시 셀렉터 노출 |
코드 근거: tabs/platform-staff.html, server/routes/platform-accounts.ts.
화면 플로우
메인 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | activeTab === 'platform-staff' | - | |
| 01 | 초기 상태 | Output | "Platform Staff (meta account) — 현재 스태프 {n}명" (검색 시 "검색 결과 {n}건") | platformListMode | |
| 10 | 엔드포인트 셀렉터 | Dropdown | endpoints.length > 1 시 노출. name (env). @change → loadPlatformAccounts() | platformEndpointId | 계정은 엔드포인트마다 별개 |
| 20 | 검색 | Input Box | placeholder "이메일 / 이름 검색" + "검색" / "스태프 목록"(초기화) / "스태프 생성"(폼 열기) | platformSearchQ | Enter 검색 |
| 30 | 역할 설명 | Info | "OPERATOR = grant 발급/회수 + 지원 진입 · SUPPORT = 발급받은 grant로 지원 진입만 · 해제 시 해당 계정의 유효 grant는 자동 회수됩니다." | - | 원문 카피 |
| 40 | 결과 메시지 | Alert | platformMsg 시 green 배너 | - | |
| 50 | 스태프 테이블 | List | [List] 컬럼 email/name/status/platform role/last login/actions | platformAccounts | |
| 51 | ㄴ platform role 배지 | Badge | OPERATOR=primary / SUPPORT=blue / 없으면 "—" | - | |
| 52 | ㄴ 역할 적용 | Dropdown+Button | 셀렉트("일반 회원"/"SUPPORT"/"OPERATOR") + "적용" → setPlatformRole(id, value). 진행 중 "적용 중..." | systemSetPlatformRole | 해제 시 grant 자동 회수 |
| 50-E | ㄴ Empty | Text | staff 모드 "플랫폼 스태프가 없습니다. 이메일로 검색해 부여하세요." / search 모드 "검색 결과가 없습니다." | - | |
| 60 | 값 없음 처리 | - | lastLoginAt 없으면 "—" | - | |
| 70 | 에러·실패 | - | 로드 실패 tabError. 생성 중복 409 | - |
서브 화면 / 인라인 폼 사양표
스태프 계정 생성 폼 (§5-2⑴)
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | staffFormOpen. 타이틀 "스태프 계정 생성" (+ 다중 시 엔드포인트 표기) | openStaffForm() | |
| 01 | 안내 | Info | "이 엔드포인트에 벤더 스태프의 계정 자체가 없을 때 생성해요. 이미 계정이 있으면 목록에서 검색해 역할 부여를 사용하세요." | - | |
| 10 | 입력 | Input Box | "이메일" / "비밀번호 (8자 이상, 대문자·소문자·숫자·특수문자 포함)" — 기본 규칙, 제출 전 화면·서버가 같은 함수로 검사(#995) / "성" / "이름" | staffForm | |
| 20 | 역할 | Dropdown | SUPPORT / OPERATOR | staffForm.platformRole | |
| 30 | 제출 | Button | "생성" → createPlatformStaff(). 진행 중 "생성 중..." | systemCreatePlatformStaff | 계정 생성 + 역할 부여 원샷, org-less 감사 |
권한 / 상태 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
case01 [역할 부여] | 적용 | platformRole 설정 + audit(org=null) | |
case02 [해제] | "일반 회원" 적용 | 역할 제거 + 유효 grant 자동 회수 | |
case03 [스태프 생성] | 생성 폼 | 계정+역할 원샷, 중복 409 | 새 엔드포인트 부트스트랩 |
case04 [엔드포인트별] | 셀렉터 | 대상 엔드포인트 accounts 조회 | 독립 realm |
OQ
- OPERATOR가 자기 자신의 역할을 해제하는 것에 대한 가드 = 코드상 미확인 TBU
- last login 표기 정밀도(타임존) = TBU