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 9acbc37b..61e7ec59 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"; @@ -34,11 +35,25 @@ 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) { + // ✅ 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