Skip to content
This is revision 2, saved by Aha00aAha00a. The latest is revision 3. View the latest Changes since
created by Aha00aAha00a at 2026-05-26
last modified by Aha00aAha00a at 2026-09-10
revision: 3

Dev Admin UI 권한별 메뉴

전체Admin과 SiteAdmin의 권한에 따라 /Admin 네비게이션 메뉴를 다르게 표시한다.

1. 네비게이션 구조

[Sites]
  ▼ AhaWiki (#1)   ← 현재 사이트: 자동 펼침 + 강조 표시
      Meta목록
      Config
      Cache
      Permission
      AccessLog
      SiteAdmins   ← 전체Admin만 표시
  ▶ OtherSite (#2) ← 전체Admin만 표시 (접힌 상태)

[전체 관리]        ← 전체Admin만 표시
  Dashboard
  User
  RecentChange
  AccessLog
  Cache (Crawler)
  S3 Browser
  • 현재 사이트는 request.host로 판별 (/api/me의 currentSiteSeq 활용)
  • SiteAdmin에게는 담당 사이트만 표시, 전체Admin은 전체 표시

2. 구현 결과

2.1. Backend

  • GET /api/me 추가: seq, nickname, isAdmin, siteAdminSeqs, currentSiteSeq 반환
  • SiteAdmin.selectByUser(userSeq) 추가
  • /api/Admin/Sites: SiteAdmin은 담당 사이트만 반환하도록 수정
  • Admin.scala: isAdmin || isSiteAdmin 기준으로 접근 허용

2.2. Frontend

  • AdminLayout에서 me fetch 후 Navigation에는 prop으로, 각 페이지에는 AdminContext.Provider로 전달
  • SiteNavItem 컴포넌트 분리로 사이트별 서브메뉴 재사용
  • me.isAdmin이 false이면 전체Admin 전용 페이지 접근 시 접근 불가 메시지 표시
  • Me API 로딩 중 네비게이션 skeleton 표시

3. 설계 결정

실제 보안은 API 레벨(isAdmin / isSiteAdmin)에서 처리한다. 프론트 메뉴 분기는 UX 목적으로만 사용한다.

4. See Also

4.2. Similar Pages

Similar pages by cosine similarity. Words after page name are term frequency.

  • 70.86% Dev SiteAdmin site(14:27), admin(14:25), api(8:5), seq(5:6), user(3:5), 사이트(2:3), 담당(3:1), 전체(2:2), access(2:1), admins(1:2)
  • 52.90% Dev ApiResponse site(14:36), api(8:42), admin(14:33), seq(5:9), 403(2:9), access(2:9), get(1:10), host(1:9), crawler(1:8), page(1:8)
  • 50.14% Dev ApiControllers api(8:24), admin(14:12), site(14:9), seq(5:3), cache(3:3), user(3:3), url(2:4), 사이트(2:4), wiki(1:5), nickname(2:2)
  • 39.89% Dev SisterWiki site(14:51), admin(14:1), page(1:14), wiki(1:12), 현재(2:9), api(8:1), cache(3:6), 같은(1:8), 표시한다(1:7), seq(5:2)
  • 34.09% Dev Cache cache(3:60), site(14:35), aha(1:36), wiki(1:36), seq(5:18), admin(14:8), page(1:21), api(8:12), 사이트(2:10), app(1:9)
  • 32.91% Dev Api api(8:147), user(3:44), page(1:34), admin(14:20), wiki(1:22), aha(1:19), 않는다(1:16), get(1:14), 표시(7:6), seq(5:8)
  • 32.57% UserNicknameChange user(3:33), nickname(2:34), api(8:23), admin(14:13), site(14:1), 않는다(1:14), seq(5:9), requests(3:10), 같은(1:8), 표시(7:1)

4.3. Adjacent Pages

Control
≤ 32
all
1.0x
1.0x
80
-120
ON
Metrics
Nodes(visible/total)0/0
Links(visible/total)0/0
Avg degree0.00
Depth coverage0
Queue(fetch/graph)0 / 0
Zoom(scale)1.00x
Ctrl/⌘ + Scroll: Zoom
Root 1-hop 2-hop+