diff --git a/src/stores/ability.ts b/src/stores/ability.ts index f65f6fe..ed65b5f 100644 --- a/src/stores/ability.ts +++ b/src/stores/ability.ts @@ -33,13 +33,21 @@ export const useAbilityStore = defineStore("ability", { if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false; if (permissions?.admin || permissions?.adminByOwner) return true; if ( - permissions[section]?.all == "*" || - permissions[section]?.all?.includes(type) || + (permissions[section]?.all == "*" || permissions[section]?.all?.includes(type)) && permissions[section] != undefined ) return true; return false; }, + canAccessSection: + (state) => + (section: PermissionSection): boolean => { + const permissions = state.permissions; + if (state.isOwner) return true; + if (permissions?.admin || permissions?.adminByOwner) return true; + if (permissions[section] != undefined) return true; + return false; + }, isAdmin: (state) => (): boolean => { const permissions = state.permissions; if (state.isOwner) return true; @@ -72,13 +80,20 @@ export const useAbilityStore = defineStore("ability", { if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false; if (permissions?.admin || permissions?.adminByOwner) return true; if ( - permissions[section]?.all == "*" || - permissions[section]?.all?.includes(type) || + (permissions[section]?.all == "*" || permissions[section]?.all?.includes(type)) && permissions[section] != undefined ) return true; return false; }, + _canAccessSection: + () => + (permissions: PermissionObject, section: PermissionSection): boolean => { + // ignores ownership + if (permissions?.admin || permissions?.adminByOwner) return true; + if (permissions[section] != undefined) return true; + return false; + }, }, actions: { setAbility(permissions: PermissionObject, isOwner: boolean) { diff --git a/src/stores/admin/navigation.ts b/src/stores/admin/navigation.ts index 8d43417..7f0d0c9 100644 --- a/src/stores/admin/navigation.ts +++ b/src/stores/admin/navigation.ts @@ -48,7 +48,7 @@ export const useNavigationStore = defineStore("navigation", { updateTopLevel() { const abilityStore = useAbilityStore(); this.topLevel = [ - ...(abilityStore.canSection("read", "club") + ...(abilityStore.canAccessSection("club") ? [ { key: "club", @@ -57,7 +57,7 @@ export const useNavigationStore = defineStore("navigation", { } as topLevelNavigationModel, ] : []), - ...(abilityStore.canSection("read", "configuration") + ...(abilityStore.canAccessSection("configuration") ? [ { key: "configuration", @@ -66,7 +66,7 @@ export const useNavigationStore = defineStore("navigation", { } as topLevelNavigationModel, ] : []), - ...(abilityStore.canSection("read", "management") + ...(abilityStore.canAccessSection("management") ? [ { key: "management",