Add more permissions
This commit is contained in:
@@ -162,6 +162,7 @@ const rawMenuGroups = [
|
||||
},
|
||||
{
|
||||
label: "Uvoz",
|
||||
requires: { permission: "manage-imports" },
|
||||
items: [
|
||||
{
|
||||
key: "imports",
|
||||
@@ -196,6 +197,9 @@ const rawMenuGroups = [
|
||||
},
|
||||
{
|
||||
label: "Konfiguracija",
|
||||
// Group-level authorization: show "Konfiguracija" only to admins or users with manage-settings
|
||||
// You can set requires on any group to hide the whole section unless allowed
|
||||
requires: { permission: "manage-settings" },
|
||||
items: [
|
||||
{
|
||||
key: "settings",
|
||||
@@ -211,7 +215,7 @@ const rawMenuGroups = [
|
||||
title: "Administrator",
|
||||
routeName: "admin.index",
|
||||
active: ["admin.index", "admin.users.index", "admin.permissions.create"],
|
||||
requires: { role: "admin", permission: "manage-settings" },
|
||||
requires: { role: "admin" },
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -222,23 +226,33 @@ const menuGroups = computed(() => {
|
||||
const roles = (user.roles || []).map((r) => r.slug);
|
||||
const permissions = user.permissions || [];
|
||||
|
||||
// Helper to determine inclusion based on optional requires meta
|
||||
function allowed(item) {
|
||||
if (!item.requires) return true;
|
||||
const needRole = item.requires.role;
|
||||
const needPerm = item.requires.permission;
|
||||
// Generic helper to determine inclusion based on optional `requires` meta
|
||||
function allowedMeta(entity) {
|
||||
const req = entity?.requires;
|
||||
if (!req) {
|
||||
return true;
|
||||
}
|
||||
const needRole = req.role ?? "admin";
|
||||
const needPerm = req.permission;
|
||||
return (
|
||||
(needRole && roles.includes(needRole)) ||
|
||||
(needPerm && permissions.includes(needPerm))
|
||||
);
|
||||
}
|
||||
|
||||
return rawMenuGroups.map((g) => {
|
||||
const items = g.items
|
||||
.filter(allowed)
|
||||
.sort((a, b) => a.title.localeCompare(b.title, "sl", { sensitivity: "base" }));
|
||||
return { label: g.label, items };
|
||||
});
|
||||
return (
|
||||
rawMenuGroups
|
||||
// Group-level permission check (hide whole group if not allowed)
|
||||
.filter((g) => allowedMeta(g))
|
||||
.map((g) => {
|
||||
const items = (g.items || [])
|
||||
.filter((item) => allowedMeta(item))
|
||||
.sort((a, b) => a.title.localeCompare(b.title, "sl", { sensitivity: "base" }));
|
||||
return { label: g.label, items };
|
||||
})
|
||||
// Drop groups that end up empty after item filtering
|
||||
.filter((g) => g.items.length > 0)
|
||||
);
|
||||
});
|
||||
|
||||
// Icon map for menu keys -> FontAwesome icon definitions
|
||||
|
||||
Reference in New Issue
Block a user