From e3d909e7602a99938820bbf6bee6bda41cd31474 Mon Sep 17 00:00:00 2001 From: nico Date: Fri, 28 Nov 2025 15:31:10 +0800 Subject: [PATCH] fix ganti role, user menu access ikut ke create --- .../user&role/_com/getMenuIdByRole.ts | 25 +++++++++++++++++++ src/app/api/[[...slugs]]/_lib/user/updt.ts | 22 ++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/app/admin/(dashboard)/user&role/_com/getMenuIdByRole.ts diff --git a/src/app/admin/(dashboard)/user&role/_com/getMenuIdByRole.ts b/src/app/admin/(dashboard)/user&role/_com/getMenuIdByRole.ts new file mode 100644 index 00000000..07524555 --- /dev/null +++ b/src/app/admin/(dashboard)/user&role/_com/getMenuIdByRole.ts @@ -0,0 +1,25 @@ +// src/app/admin/_com/getMenuIdsByRoleId.ts +import { navBar, role1, role2, role3 } from '@/app/admin/_com/list_PageAdmin'; + +/** + * Mengembalikan daftar ID menu (string[]) berdasarkan roleId + */ +export function getMenuIdsByRoleId(roleId: string | number): string[] { + const id = typeof roleId === 'string' ? parseInt(roleId, 10) : roleId; + + switch (id) { + case 0: + // Asumsikan devBar ada dan punya struktur sama + return []; // atau sesuaikan jika ada devBar + case 1: + return navBar.map(section => section.id); + case 2: + return role1.map(section => section.id); + case 3: + return role2.map(section => section.id); + case 4: + return role3.map(section => section.id); + default: + return []; + } +} \ No newline at end of file diff --git a/src/app/api/[[...slugs]]/_lib/user/updt.ts b/src/app/api/[[...slugs]]/_lib/user/updt.ts index 5905d272..3b9a0d38 100644 --- a/src/app/api/[[...slugs]]/_lib/user/updt.ts +++ b/src/app/api/[[...slugs]]/_lib/user/updt.ts @@ -1,4 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ +import { getMenuIdsByRoleId } from "@/app/admin/(dashboard)/user&role/_com/getMenuIdByRole"; import prisma from "@/lib/prisma"; import { Context } from "elysia"; @@ -33,6 +34,27 @@ export default async function userUpdate(context: Context) { const isRoleChanged = roleId && currentUser.roleId !== roleId; const isActiveChanged = isActive !== undefined && currentUser.isActive !== isActive; + // ✅ Jika role berubah, reset dan set ulang akses menu + if (isRoleChanged && roleId) { + // Hapus akses lama + await prisma.userMenuAccess.deleteMany({ + where: { userId: id } + }); + + // Ambil menu default untuk role baru + const menuIds = getMenuIdsByRoleId(roleId); + + if (menuIds.length > 0) { + // Buat akses baru + await prisma.userMenuAccess.createMany({ + data: menuIds.map(menuId => ({ + userId: id, + menuId + })) + }); + } + } + // Update user const updatedUser = await prisma.user.update({ where: { id },