enhance: permission handling

This commit is contained in:
Julian Krauser 2025-05-16 11:12:18 +02:00
parent 35fd8a8e82
commit 4ee16c624a
2 changed files with 22 additions and 7 deletions

View file

@ -33,13 +33,21 @@ export const useAbilityStore = defineStore("ability", {
if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false; if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false;
if (permissions?.admin || permissions?.adminByOwner) return true; if (permissions?.admin || permissions?.adminByOwner) return true;
if ( if (
permissions[section]?.all == "*" || (permissions[section]?.all == "*" || permissions[section]?.all?.includes(type)) &&
permissions[section]?.all?.includes(type) ||
permissions[section] != undefined permissions[section] != undefined
) )
return true; return true;
return false; 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 => { isAdmin: (state) => (): boolean => {
const permissions = state.permissions; const permissions = state.permissions;
if (state.isOwner) return true; if (state.isOwner) return true;
@ -72,13 +80,20 @@ export const useAbilityStore = defineStore("ability", {
if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false; if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false;
if (permissions?.admin || permissions?.adminByOwner) return true; if (permissions?.admin || permissions?.adminByOwner) return true;
if ( if (
permissions[section]?.all == "*" || (permissions[section]?.all == "*" || permissions[section]?.all?.includes(type)) &&
permissions[section]?.all?.includes(type) ||
permissions[section] != undefined permissions[section] != undefined
) )
return true; return true;
return false; 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: { actions: {
setAbility(permissions: PermissionObject, isOwner: boolean) { setAbility(permissions: PermissionObject, isOwner: boolean) {

View file

@ -48,7 +48,7 @@ export const useNavigationStore = defineStore("navigation", {
updateTopLevel() { updateTopLevel() {
const abilityStore = useAbilityStore(); const abilityStore = useAbilityStore();
this.topLevel = [ this.topLevel = [
...(abilityStore.canSection("read", "club") ...(abilityStore.canAccessSection("club")
? [ ? [
{ {
key: "club", key: "club",
@ -57,7 +57,7 @@ export const useNavigationStore = defineStore("navigation", {
} as topLevelNavigationModel, } as topLevelNavigationModel,
] ]
: []), : []),
...(abilityStore.canSection("read", "configuration") ...(abilityStore.canAccessSection("configuration")
? [ ? [
{ {
key: "configuration", key: "configuration",
@ -66,7 +66,7 @@ export const useNavigationStore = defineStore("navigation", {
} as topLevelNavigationModel, } as topLevelNavigationModel,
] ]
: []), : []),
...(abilityStore.canSection("read", "management") ...(abilityStore.canAccessSection("management")
? [ ? [
{ {
key: "management", key: "management",