upd: dashboard admin

Deskripsi:
- databse
- seeder
- list user role

NO Issues
This commit is contained in:
2025-11-24 14:27:19 +08:00
parent c72ef5a755
commit 0a3afb7b9c
7 changed files with 798 additions and 16 deletions

View File

@@ -0,0 +1,59 @@
import config from "@/lib/listPermission.json";
export interface PermissionNode {
key: string;
label: string;
children?: PermissionNode[];
}
interface Grouped {
[key: string]: {
label: string;
children: Grouped;
actions: string[];
};
}
/* --- Build lookup table --- */
const permissionMap: Record<string, string[]> = {};
function walk(nodes: PermissionNode[], path: string[] = []) {
nodes.forEach((n) => {
const full = [...path, n.label];
permissionMap[n.key] = full;
if (n.children) walk(n.children, full);
});
}
walk(config.menus);
/* --- Convert keys → hierarchical grouped --- */
export function groupPermissions(keys: string[]) {
const tree: Grouped = {};
keys.forEach((key) => {
const path = permissionMap[key];
if (!path) return;
let pointer = tree;
path.forEach((label, idx) => {
if (!pointer[label]) {
pointer[label] = {
label,
children: {},
actions: []
};
}
// last item = actual permission action
if (idx === path.length - 1) {
pointer[label].actions.push(label);
}
pointer = pointer[label].children;
});
});
return tree;
}

178
src/lib/listPermission.json Normal file
View File

@@ -0,0 +1,178 @@
{
"menus": [
{
"key": "dashboard",
"label": "Dashboard",
"default": true,
"children": [
{
"key": "dashboard.view",
"label": "Melihat Dashboard",
"default": true
}
]
},
{
"key": "pengaduan",
"label": "Pengaduan",
"default": true,
"children": [
{
"key": "pengaduan.view",
"label": "Melihat List & Detail",
"default": true
},
{
"key": "pengaduan.antrian",
"label": "Antrian",
"default": true,
"children": [
{ "key": "pengaduan.antrian.tolak", "label": "Menolak", "default": true },
{ "key": "pengaduan.antrian.terima", "label": "Menerima", "default": true }
]
},
{
"key": "pengaduan.diterima",
"label": "Diterima",
"default": true,
"children": [
{ "key": "pengaduan.diterima.dikerjakan", "label": "Dikerjakan", "default": true }
]
},
{
"key": "pengaduan.dikerjakan",
"label": "Dikerjakan",
"default": true,
"children": [
{ "key": "pengaduan.dikerjakan.selesai", "label": "Diselesaikan", "default": true }
]
}
]
},
{
"key": "pelayanan",
"label": "Pelayanan",
"default": true,
"children": [
{
"key": "pelayanan.view",
"label": "Melihat List & Detail",
"default": true
},
{
"key": "pelayanan.antrian",
"label": "Antrian",
"default": true,
"children": [
{ "key": "pelayanan.antrian.tolak", "label": "Menolak", "default": true },
{ "key": "pelayanan.antrian.terima", "label": "Menerima", "default": true }
]
},
{
"key": "pelayanan.diterima",
"label": "Diterima",
"default": true,
"children": [
{ "key": "pelayanan.diterima.tolak", "label": "Menolak", "default": true },
{ "key": "pelayanan.diterima.setujui", "label": "Menyetujui", "default": true }
]
}
]
},
{
"key": "warga",
"label": "Warga",
"default": true,
"children": [
{
"key": "warga.view",
"label": "Melihat List & Detail",
"default": true
}
]
},
{
"key": "setting",
"label": "Setting",
"default": true,
"children": [
{
"key": "setting.profile",
"label": "Profile",
"default": true,
"children": [
{ "key": "setting.profile.view", "label": "View", "default": true },
{ "key": "setting.profile.edit", "label": "Edit", "default": true },
{ "key": "setting.profile.password", "label": "Ubah Password", "default": true }
]
},
{
"key": "setting.user",
"label": "User",
"default": true,
"children": [
{ "key": "setting.user.view", "label": "View List", "default": true },
{ "key": "setting.user.tambah", "label": "Tambah", "default": true },
{ "key": "setting.user.edit", "label": "Edit", "default": true },
{ "key": "setting.user.delete", "label": "Delete", "default": true }
]
},
{
"key": "setting.user_role",
"label": "User Role",
"default": true,
"children": [
{ "key": "setting.user_role.view", "label": "View List", "default": true },
{ "key": "setting.user_role.tambah", "label": "Tambah", "default": true },
{ "key": "setting.user_role.edit", "label": "Edit", "default": true },
{ "key": "setting.user_role.delete", "label": "Delete", "default": true }
]
},
{
"key": "setting.kategori_pengaduan",
"label": "Kategori Pengaduan",
"default": true,
"children": [
{ "key": "setting.kategori_pengaduan.view", "label": "View List", "default": true },
{ "key": "setting.kategori_pengaduan.tambah", "label": "Tambah", "default": true },
{ "key": "setting.kategori_pengaduan.edit", "label": "Edit", "default": true },
{ "key": "setting.kategori_pengaduan.delete", "label": "Delete", "default": true }
]
},
{
"key": "setting.kategori_pelayanan",
"label": "Kategori Pelayanan Surat",
"default": true,
"children": [
{ "key": "setting.kategori_pelayanan.view", "label": "View List", "default": true },
{ "key": "setting.kategori_pelayanan.detail", "label": "View Detail", "default": true },
{ "key": "setting.kategori_pelayanan.tambah", "label": "Tambah", "default": true },
{ "key": "setting.kategori_pelayanan.edit", "label": "Edit", "default": true },
{ "key": "setting.kategori_pelayanan.delete", "label": "Delete", "default": true }
]
},
{
"key": "setting.desa",
"label": "Desa",
"default": true,
"children": [
{ "key": "setting.desa.view", "label": "View List", "default": true },
{ "key": "setting.desa.edit", "label": "Edit", "default": true }
]
}
]
},
{
"key": "api_key",
"label": "API Key",
"default": true,
"children": []
},
{
"key": "credential",
"label": "Credential",
"default": true,
"children": []
}
]
}