Browse Source

Maintenance: Desktop - Add support for navigation menu guards.

Dusan Vuckovic 10 months ago
parent
commit
edf42ad8f6

+ 8 - 2
app/frontend/apps/desktop/components/NavigationMenu/NavigationMenu.vue

@@ -27,9 +27,15 @@ const permittedEntries = computed(() => {
     props.entries,
     (memo, entries, category) => {
       memo[category] = entries.filter((entry) => {
-        if (!entry.route.meta?.requiredPermission) return true
+        if (
+          entry.route.meta?.requiredPermission &&
+          !session.hasPermission(entry.route.meta.requiredPermission)
+        )
+          return false
 
-        return session.hasPermission(entry.route.meta.requiredPermission)
+        if (typeof entry.show === 'function') return entry.show()
+
+        return true
       })
     },
     {} as Record<string, NavigationMenuEntry[]>,

+ 1 - 0
app/frontend/apps/desktop/components/NavigationMenu/types.ts

@@ -15,4 +15,5 @@ export type NavigationMenuEntry = {
   icon?: string
   keywords?: string
   route: RouteRecordRaw & { name: string }
+  show?: () => boolean
 }

+ 1 - 0
app/frontend/apps/desktop/pages/personal-setting/views/PersonalSetting/plugins/types.ts

@@ -10,4 +10,5 @@ export interface PersonalSettingPlugin {
   route: RouteRecordRaw & { name: string }
   order: number
   keywords: string
+  show?: () => boolean
 }