upd: dashboard admin
Deskripsi: - databse - seeder - list user role NO Issues
This commit is contained in:
59
src/lib/groupPermission.ts
Normal file
59
src/lib/groupPermission.ts
Normal 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
178
src/lib/listPermission.json
Normal 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": []
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user