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) memeriksarole.menusadmin untukslugmenu dan ability. Resolver admin yang umum menumpuk@UseGuards(JwtAuthGuard, LastActivityGuard, RoleAbilityGuard)— dipakai di ~59 resolver.@Public()melewati guard.LastActivityGuardmemaksa auto-logout saat idle setelahCMS_AUTO_LOGOUT_MAX_INACTIVE_SECONDS(default 1800s). - Frontend admin —
useAccess(slug, action)(src/hooks/useAccess.tsx) membacasession.user.me.role.menus[]dan menggerakkan baik sidebar (src/components/Sidebar/sidebar-menus.tsxmemfilter menurutcanView) maupun guard halaman (halaman yang ditolak menjalankanrouter.push("/404")). Permission datang dari query backendme, bukan hard-coded.src/middleware.tshanya 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 disrc/modules/roles/components/FormRoleMenuAccesses.tsx.- Menu slug dikatalogkan di
src/components/Sidebar/menu.tsxdan konstanta URL disrc/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
useAccessmenyembunyikan dan memblokirnya. - Dashboard masih stub (lihat Admin repo) — jangan mendokumentasikan analytics yang tidak ada.