Skip to content

Admin users and RBAC

Siapa yang boleh memakai admin, dan apa yang boleh dilakukan tiap role. Module admins memiliki admin user, role dan menu; frontend admin mencerminkan aturannya di sisi client.

Cara halaman ini diverifikasi

Dibaca pada 2026-09-15 dari backend module admins dan guard-nya, serta hook useAccess dan area /admin/roles di frontend admin.

Modelnya

Tabel: admins, roles, menus, roles_menus, departments, settings. Sebuah role terhubung ke menu lewat roles_menus; tiap hubungan membawa lima ability: view, add, update, delete, export.

Admin auth

Resolver auth: login, loginWithGoogle, refreshToken, logout, requestResetPassword, verifyResetPasswordToken, resetPassword. Ini adalah realm JWT admin (strategy jwt / jwt-refresh), terpisah dari member. Login admin mendukung Google OAuth selain email/password. Lihat API and auth.

Cara hak dipaksakan

  • Backend@RoleCheck({ slug, action }) + RoleAbilityGuard (src/admins/guards/role-check.guard.ts) memeriksa role.menus admin untuk slug menu dan ability. Resolver admin yang umum menumpuk @UseGuards(JwtAuthGuard, LastActivityGuard, RoleAbilityGuard) — dipakai di ~59 resolver. @Public() melewati guard. LastActivityGuard memaksa auto-logout saat idle setelah CMS_AUTO_LOGOUT_MAX_INACTIVE_SECONDS (default 1800s).
  • Frontend adminuseAccess(slug, action) (src/hooks/useAccess.tsx) membaca session.user.me.role.menus[] dan menggerakkan baik sidebar (src/components/Sidebar/sidebar-menus.tsx memfilter menurut canView) maupun guard halaman (halaman yang ditolak menjalankan router.push("/404")). Permission datang dari query backend me, bukan hard-coded. src/middleware.ts hanya gerbang kasar "sudah login?" — ia tidak memeriksa role.

Mengelolanya di admin

  • /admin/admins — admin user (list, add, edit; export Excel).
  • /admin/roles — role: add-role, edit-role, view-role. Grid ability per-menu ada di src/modules/roles/components/FormRoleMenuAccesses.tsx.
  • Menu slug dikatalogkan di src/components/Sidebar/menu.tsx dan konstanta URL di src/constants/menus.ts.

Hal yang perlu diwaspadai

  • RBAC dipaksakan di sisi client pada frontend dan per-resolver di backend. Middleware tidak memaksa hak per-action — gerbang sebenarnya untuk data adalah guard backend.
  • Halaman admin baru butuh menu slug dan role grant, atau useAccess menyembunyikan dan memblokirnya.
  • Dashboard masih stub (lihat Admin repo) — jangan mendokumentasikan analytics yang tidak ada.