diff --git a/src/stores/ability.ts b/src/stores/ability.ts index 7f28346..a9f3162 100644 --- a/src/stores/ability.ts +++ b/src/stores/ability.ts @@ -26,6 +26,20 @@ export const useAbilityStore = defineStore("ability", { return true; return false; }, + canSection: + (state) => + (type: PermissionType | "admin", section: PermissionSection): boolean => { + const permissions = state.permissions; + if (type == "admin") return permissions.admin ?? false; + if (permissions.admin) return true; + if ( + permissions[section]?.all == "*" || + permissions[section]?.all?.includes(type) || + permissions[section] != undefined + ) + return true; + return false; + }, _can: () => ( diff --git a/src/stores/admin/navigation.ts b/src/stores/admin/navigation.ts index 164fd17..ea92171 100644 --- a/src/stores/admin/navigation.ts +++ b/src/stores/admin/navigation.ts @@ -81,7 +81,7 @@ export const useNavigationStore = defineStore("navigation", { updateTopLevel() { const abilityStore = useAbilityStore(); this.topLevel = [ - ...(abilityStore.can("read", "club") + ...(abilityStore.canSection("read", "club") ? [ { key: "club", @@ -90,7 +90,7 @@ export const useNavigationStore = defineStore("navigation", { } as topLevelNavigationModel, ] : []), - ...(abilityStore.can("read", "settings") + ...(abilityStore.canSection("read", "settings") ? [ { key: "settings", @@ -99,7 +99,7 @@ export const useNavigationStore = defineStore("navigation", { } as topLevelNavigationModel, ] : []), - ...(abilityStore.can("read", "user") + ...(abilityStore.canSection("read", "user") ? [ { key: "user", diff --git a/src/types/permissionTypes.ts b/src/types/permissionTypes.ts index f042390..a73000b 100644 --- a/src/types/permissionTypes.ts +++ b/src/types/permissionTypes.ts @@ -12,7 +12,7 @@ export type PermissionModule = | "user" | "role"; -export type PermissionType = "create" | "read" | "update" | "delete"; +export type PermissionType = "read" | "create" | "update" | "delete"; export type PermissionString = | `${PermissionSection}.${PermissionModule}.${PermissionType}` // für spezifische Berechtigungen