Meerkit
Meerkit
HomeDocsComponentsAPI
GitHub

Getting Started

5
IntroductionInstallationProject StructureThemingDeployment

CLI

6
CLI Overviewinit & setupstart, stop & openstatus, check, env & logsdbadd, test & update

Core Concepts

5
AuthenticationRoles & PermissionsData ModelLogin LockoutSecurity

Guides

3
Protect a pageAdd a roleCall your own API

Components

24

사용자 화면12

Login FormSignup FormEmail VerificationTerms AgreementGoogle LoginPassword ResetProfile & PasswordNicknameAuth DialogProfile ImageUser AvatarUser Menu

관리자 화면6

Member TableMember DirectoryMember AI UsageMember AI Usage HistoryRole ManagerRole Select

공통5

Address FieldFile DropzoneLoadingDateRoute Guards

AI Components

4
AI Prompt InputThinking IndicatorAPI Key InputVoice

API

6
OverviewHealthAuthUsers · 내 정보Users · 관리자LLM

Reference

2
Hooks & StateFAQ

User Menu

사용자용 컴포넌트서비스를 쓰는 일반 사용자가 보는 화면에 쓰입니다.

로그인한 사용자가 자기 계정을 다루는 아바타 드롭다운 메뉴입니다.

shadcn/ui · Dropdown Menushadcn/ui · Avatar

로그인한 사용자가 자기 계정을 다루는 메뉴입니다. 헤더 오른쪽 위에 아바타 버튼으로 놓고, 누르면 내 정보 확인, 페이지 이동, 로그아웃을 할 수 있는 드롭다운이 열립니다. 로그인 전에는 보이지 않고, 대신 로그인·회원가입 버튼을 보여 주는 것이 일반적입니다.

Preview

아래 버튼을 눌러 보세요. 관리자(MASTER)와 일반 사용자는 메뉴 항목이 다릅니다.

관리자 (MASTER)
일반 사용자 (WRITER)
tsx
<UserMenu user={user} onLogout={() => logout.mutate()} />

What users can do

메뉴 영역누가 보나할 수 있는 것
아바타 버튼로그인한 모든 사용자누르면 메뉴가 열리고, 한 번 더 누르거나 바깥을 누르면 닫힙니다.
프로필 머리말로그인한 모든 사용자내 이름, 이메일, 역할 배지를 한눈에 확인합니다.
내 정보로그인한 모든 사용자/me 화면으로 이동해 내 계정 정보를 봅니다.
멤버 관리MASTER만/admin/members로 이동해 유저 목록, 역할 변경, 탈퇴 처리를 합니다.
바로가기내가 추가한 항목내 서비스의 화면으로 이동합니다. (items로 추가)
로그아웃로그인한 모든 사용자세션을 끝내고 로그인 전 상태로 돌아갑니다.
"멤버 관리" 항목은 편의를 위해 숨기는 것입니다. 실제 접근 제어는 RequireRole과 서버가 합니다.

When it appears

로그인 여부에 따라 헤더의 오른쪽을 바꿔 줍니다. 로그인 전에는 모달을 여는 버튼, 후에는 이 메뉴입니다.

tsx
const { user, isAuthenticated } = useAuth();
const logout = useLogout();
const openDialog = useAuthDialog((s) => s.openDialog);

{isAuthenticated && user ? (
  <UserMenu user={user} onLogout={() => logout.mutate()} />
) : (
  <>
    <Button variant="ghost" onClick={() => openDialog("login")}>로그인</Button>
    <Button onClick={() => openDialog("signup")}>회원가입</Button>
  </>
)}

Customization

메뉴에 바로가기 추가

items에 링크를 넘기면 "바로가기" 영역에 나타납니다.

tsx
<UserMenu
  user={user}
  onLogout={logout}
  items={[
    { label: "내 리포트", href: "/reports" },
    { label: "설정", href: "/settings" },
  ]}
/>

아바타만 보여 주기

좁은 헤더에서는 이름을 숨길 수 있습니다.

tsx
<UserMenu user={user} onLogout={logout} showName={false} />

기본 항목 바꾸기

  • "내 정보", "멤버 관리", "로그아웃" 같은 기본 항목은 UserMenu.tsx에서 직접 고칩니다.
  • 이동 경로는 meerkitConfig.routes에 모여 있어 한 곳에서 바꿀 수 있습니다.
  • 프로필 이미지는 User.avatar_url을 채우면 아바타에 나타납니다 (User Avatar 참고).
  • 색과 모서리는 Theming의 토큰을 따릅니다.

Accessibility

  • 아바타 버튼에 aria-label="계정 메뉴"가 있습니다.
  • 키보드: Enter/Space로 열고, 방향키로 이동하고, Esc로 닫습니다. (Radix Dropdown Menu 기본 동작)
  • 닫으면 포커스가 아바타 버튼으로 돌아옵니다.

Props

PropType설명
user필수User표시할 로그인 사용자. role.name으로 관리자 여부를 판단합니다.
onLogout필수() => void로그아웃을 눌렀을 때 호출합니다. 보통 useLogout().mutate
items{ label, href, icon? }[]기본 메뉴 아래에 추가할 바로가기.
showNamebooleanfalse면 아바타만 보여 줍니다. 기본 true.
align"start" | "center" | "end"메뉴가 열리는 정렬. 기본 end(오른쪽 맞춤).

Related

  • UserAvatar: 메뉴 안팎에서 쓰는 아바타
  • useLogout: 로그아웃 처리 (Hooks & State)
  • RequireRole: 관리자 화면 접근 제어 (Route Guards)

Related API

이 컴포넌트가 호출하는 API입니다. 누르면 요청·응답 명세로 이동합니다.

GET/api/users/me내 정보POST/api/auth/logout로그아웃
User AvatarMember Table
© Meerkit. All rights reserved.GitHub