From e3d909e7602a99938820bbf6bee6bda41cd31474 Mon Sep 17 00:00:00 2001 From: nico Date: Fri, 28 Nov 2025 15:31:10 +0800 Subject: [PATCH 1/3] 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 }, From 54f83da3b89ee0d29b61d73cb7a08a20f48e8ea1 Mon Sep 17 00:00:00 2001 From: nico Date: Fri, 28 Nov 2025 15:35:21 +0800 Subject: [PATCH 2/3] fix ganti role, user menu access ikut ke create --- src/app/api/[[...slugs]]/_lib/user/updt.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/api/[[...slugs]]/_lib/user/updt.ts b/src/app/api/[[...slugs]]/_lib/user/updt.ts index b51923be..97bb8d96 100644 --- a/src/app/api/[[...slugs]]/_lib/user/updt.ts +++ b/src/app/api/[[...slugs]]/_lib/user/updt.ts @@ -63,6 +63,8 @@ export default async function userUpdate(context: Context) { } } + + // Update user const updatedUser = await prisma.user.update({ where: { id }, From 1c1e8fb190fdbd7501953409b4f46f5d3e497720 Mon Sep 17 00:00:00 2001 From: nico Date: Fri, 28 Nov 2025 15:38:07 +0800 Subject: [PATCH 3/3] fix ganti role, user menu access ikut ke create fix --- src/app/api/[[...slugs]]/_lib/user/updt.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/app/api/[[...slugs]]/_lib/user/updt.ts b/src/app/api/[[...slugs]]/_lib/user/updt.ts index 97bb8d96..61e7ec59 100644 --- a/src/app/api/[[...slugs]]/_lib/user/updt.ts +++ b/src/app/api/[[...slugs]]/_lib/user/updt.ts @@ -35,13 +35,6 @@ export default async function userUpdate(context: Context) { const isActiveChanged = isActive !== undefined && currentUser.isActive !== isActive; - // ✅ Jika role berubah, hapus semua akses menu yang ada - if (isRoleChanged) { - await prisma.userMenuAccess.deleteMany({ - where: { userId: id } - }); - } - // ✅ Jika role berubah, reset dan set ulang akses menu if (isRoleChanged && roleId) { // Hapus akses lama @@ -63,8 +56,6 @@ export default async function userUpdate(context: Context) { } } - - // Update user const updatedUser = await prisma.user.update({ where: { id },