diff --git a/src/router/adminGuard.ts b/src/router/adminGuard.ts index 83d1331..8016b7d 100644 --- a/src/router/adminGuard.ts +++ b/src/router/adminGuard.ts @@ -12,7 +12,14 @@ export async function abilityAndNavUpdate(to: any, from: any, next: any) { let section = to.meta.section; let module = to.meta.module; - if ((admin && ability.isAdmin()) || ability.can(type, section, module)) { + if (to.name == "admin-default") { + navigation.activeNavigation = "club"; + navigation.activeLink = null; + navigation.updateTopLevel(); + navigation.updateNavigation(); + NProgress.done(); + next(); + } else if ((admin && ability.isAdmin()) || ability.can(type, section, module)) { NProgress.done(); navigation.activeNavigation = to.name.split("-")[1]; navigation.activeLink = to.name.split("-")[2]; diff --git a/src/router/index.ts b/src/router/index.ts index 0be84bf..02cbdc3 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -15,7 +15,7 @@ const router = createRouter({ routes: [ { path: "/", - redirect: { name: "admin" }, + redirect: { name: "admin-default" }, }, { path: "/login", @@ -76,12 +76,13 @@ const router = createRouter({ path: "/admin", name: "admin", component: () => import("@/views/admin/View.vue"), - beforeEnter: [isAuthenticated], + beforeEnter: [isAuthenticated, abilityAndNavUpdate], children: [ { path: "", name: "admin-default", component: () => import("@/views/admin/ViewSelect.vue"), + beforeEnter: [abilityAndNavUpdate], }, { path: "club", 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..dfd93f4 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", @@ -147,7 +147,8 @@ export const useNavigationStore = defineStore("navigation", { this.activeNavigationObject.main.findIndex((e) => e.key == this.activeLink) == -1 || this.activeLink == "default" ) { - let link = this.activeNavigationObject.main[0].key; + let link = this.activeNavigationObject.main.filter((m) => !m.key.startsWith("divider"))[0].key; + this.activeLink = link; router.push({ name: `admin-${this.activeNavigation}-${link}` }); } }, diff --git a/src/templates/Main.vue b/src/templates/Main.vue index 7176f8e..ee95a6c 100644 --- a/src/templates/Main.vue +++ b/src/templates/Main.vue @@ -16,10 +16,13 @@
laden fehlgeschlagen
diff --git a/src/views/account/LoginData.vue b/src/views/account/LoginData.vue index 7378799..8384374 100644 --- a/src/views/account/LoginData.vue +++ b/src/views/account/LoginData.vue @@ -1,10 +1,5 @@ -laden fehlgeschlagen
diff --git a/src/views/account/Permission.vue b/src/views/account/Permission.vue index 57374f9..56d3311 100644 --- a/src/views/account/Permission.vue +++ b/src/views/account/Permission.vue @@ -1,18 +1,13 @@ -Ergebnisse:
-
- {{ queryError }}
+ Ergebnisse:
+ {{ queryError }}
+
+ CODE:
+ MSG:
+ RESULTING SQL:
- CODE:
- MSG:
- RESULTING SQL: {{ row }} {{ row }} laden fehlgeschlagen laden fehlgeschlagen laden fehlgeschlagen laden fehlgeschlagen laden fehlgeschlagen
Ein Newsletter kann als pdf exportiert oder per Mail versandt werden. laden fehlgeschlagen laden fehlgeschlagen laden fehlgeschlagen
Mit diesem Editor können Vorlagen erstellt werden, welche später dafür genutzt werden können, um pdfs zu drucken
diff --git a/src/views/admin/configuration/templateUsage/TemplateUsage.vue b/src/views/admin/configuration/templateUsage/TemplateUsage.vue
index 5dcfd37..8050121 100644
--- a/src/views/admin/configuration/templateUsage/TemplateUsage.vue
+++ b/src/views/admin/configuration/templateUsage/TemplateUsage.vue
@@ -1,10 +1,5 @@
- laden fehlgeschlagen laden fehlgeschlagen Hinweis: Optionale Felder können leer gelassen werden und nutzen dann einen Fallback-Werte. laden fehlgeschlagen Hinweis: Berechtigungen von Nutzer und Rolle sind ergänzend. laden fehlgeschlagen laden fehlgeschlagen laden fehlgeschlagen
+ {{ queryError.code }}
+
+
+ {{ queryError.msg }}
+
+
+ {{ queryError.sql }}
- {{ queryError.code }}
-
-
- {{ queryError.msg }}
-
-
- {{ queryError.sql }}
- Auszeichnungen
- Auszeichnung {{ origin?.award }} - Daten bearbeiten
- Termintyp
- Termintyp {{ origin?.type }} - Daten bearbeiten
- Kommunikationsarten
- Kommunikationsart {{ origin?.type }} - Daten bearbeiten
- Vereinsämter
- Vereinsamt {{ origin?.position }} - Daten bearbeiten
- Mitgliedsstatus
- Mitgliedsstatus {{ origin?.status }} - Daten bearbeiten
- Newsletter Konfiguration
-
diff --git a/src/views/admin/configuration/qualification/Qualification.vue b/src/views/admin/configuration/qualification/Qualification.vue
index cca2026..f6de938 100644
--- a/src/views/admin/configuration/qualification/Qualification.vue
+++ b/src/views/admin/configuration/qualification/Qualification.vue
@@ -1,10 +1,5 @@
- Qualifikationen
- Qualifikation {{ origin?.qualification }} - Daten bearbeiten
- gespeicherte Abfragen
- Anrede
- Anrede {{ origin?.salutation }} - Daten bearbeiten
- Templates
- Template {{ origin?.template }} - Daten bearbeiten
- Templates - Verwendungsinformation
- Template-Verwendung
- Backups
- Rollen
- Rolle {{ origin?.role }} - Daten bearbeiten
- Rolle {{ role?.role }} - Berechtigungen bearbeiten
- Einstellungen
- offene Einladungen
- Benutzer
- Nutzer {{ origin?.username }} - Daten bearbeiten
- Nutzer {{ user?.username }} - Berechtigungen bearbeiten
- Nutzer {{ origin?.username }} - Rollen bearbeiten
- Versions-Kontrolle
- Webapi-Token
- Webapi-Token {{ origin?.title }} - Daten bearbeiten
- Webapi-Token {{ webapi?.title }} - Berechtigungen bearbeiten
- Kalender
-
+ Kalender-Erklärung - WebCal Kalendar einbinden
- iOS: Webcal-Link einbinden