permission type rename

This commit is contained in:
Julian Krauser 2025-02-15 11:26:34 +01:00
parent 8033038c2e
commit 9d96a3f921
36 changed files with 128 additions and 108 deletions

View file

@ -4,12 +4,12 @@
<p>{{ award.award }}</p> <p>{{ award.award }}</p>
<div class="flex flex-row"> <div class="flex flex-row">
<RouterLink <RouterLink
v-if="can('update', 'settings', 'award')" v-if="can('update', 'configuration', 'award')"
:to="{ name: 'admin-settings-award-edit', params: { id: award.id } }" :to="{ name: 'admin-settings-award-edit', params: { id: award.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div v-if="can('delete', 'settings', 'award')" @click="openDeleteModal"> <div v-if="can('delete', 'configuration', 'award')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -11,12 +11,12 @@
</div> </div>
<div class="flex flex-row"> <div class="flex flex-row">
<RouterLink <RouterLink
v-if="can('update', 'settings', 'calendar_type')" v-if="can('update', 'configuration', 'calendar_type')"
:to="{ name: 'admin-settings-calendar_type-edit', params: { id: calendarType.id } }" :to="{ name: 'admin-settings-calendar_type-edit', params: { id: calendarType.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div v-if="can('delete', 'settings', 'calendar_type')" @click="openDeleteModal"> <div v-if="can('delete', 'configuration', 'calendar_type')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -4,12 +4,12 @@
<p>{{ communicationType.type }}</p> <p>{{ communicationType.type }}</p>
<div class="flex flex-row"> <div class="flex flex-row">
<RouterLink <RouterLink
v-if="can('update', 'settings', 'communication_type')" v-if="can('update', 'configuration', 'communication_type')"
:to="{ name: 'admin-settings-communication_type-edit', params: { id: communicationType.id } }" :to="{ name: 'admin-settings-communication_type-edit', params: { id: communicationType.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div v-if="can('delete', 'settings', 'communication_type')" @click="openDeleteModal"> <div v-if="can('delete', 'configuration', 'communication_type')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -4,12 +4,12 @@
<p>{{ executivePosition.position }}</p> <p>{{ executivePosition.position }}</p>
<div class="flex flex-row"> <div class="flex flex-row">
<RouterLink <RouterLink
v-if="can('update', 'settings', 'executive_position')" v-if="can('update', 'configuration', 'executive_position')"
:to="{ name: 'admin-settings-executive_position-edit', params: { id: executivePosition.id } }" :to="{ name: 'admin-settings-executive_position-edit', params: { id: executivePosition.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div v-if="can('delete', 'settings', 'executive_position')" @click="openDeleteModal"> <div v-if="can('delete', 'configuration', 'executive_position')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -4,12 +4,12 @@
<p>{{ membershipStatus.status }}</p> <p>{{ membershipStatus.status }}</p>
<div class="flex flex-row"> <div class="flex flex-row">
<RouterLink <RouterLink
v-if="can('update', 'settings', 'membership_status')" v-if="can('update', 'configuration', 'membership_status')"
:to="{ name: 'admin-settings-membership_status-edit', params: { id: membershipStatus.id } }" :to="{ name: 'admin-settings-membership_status-edit', params: { id: membershipStatus.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div v-if="can('delete', 'settings', 'membership_status')" @click="openDeleteModal"> <div v-if="can('delete', 'configuration', 'membership_status')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -2,7 +2,7 @@
<form ref="form" class="flex flex-col h-fit w-full border border-primary rounded-md" @submit.prevent="updateUsage"> <form ref="form" class="flex flex-col h-fit w-full border border-primary rounded-md" @submit.prevent="updateUsage">
<div class="bg-primary p-2 text-white flex flex-row justify-between items-center"> <div class="bg-primary p-2 text-white flex flex-row justify-between items-center">
<p>Newsletter bei Type "{{ comType.type }}" versenden/exportieren als</p> <p>Newsletter bei Type "{{ comType.type }}" versenden/exportieren als</p>
<div v-if="can('create', 'settings', 'newsletter_config')" class="flex flex-row justify-end w-16"> <div v-if="can('create', 'configuration', 'newsletter_config')" class="flex flex-row justify-end w-16">
<button v-if="status == null" type="submit" class="!p-0 !h-fit !w-fit" title="speichern"> <button v-if="status == null" type="submit" class="!p-0 !h-fit !w-fit" title="speichern">
<ArchiveBoxArrowDownIcon class="w-5 h-5 p-1 box-content pointer-events-none" /> <ArchiveBoxArrowDownIcon class="w-5 h-5 p-1 box-content pointer-events-none" />
</button> </button>

View file

@ -4,12 +4,12 @@
<p>{{ qualification.qualification }}</p> <p>{{ qualification.qualification }}</p>
<div class="flex flex-row"> <div class="flex flex-row">
<RouterLink <RouterLink
v-if="can('update', 'settings', 'qualification')" v-if="can('update', 'configuration', 'qualification')"
:to="{ name: 'admin-settings-qualification-edit', params: { id: qualification.id } }" :to="{ name: 'admin-settings-qualification-edit', params: { id: qualification.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div v-if="can('delete', 'settings', 'qualification')" @click="openDeleteModal"> <div v-if="can('delete', 'configuration', 'qualification')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -6,10 +6,10 @@
<div @click="loadUpdate"> <div @click="loadUpdate">
<EyeIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <EyeIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
<div v-if="can('update', 'settings', 'query_store')" @click="loadUpdate"> <div v-if="can('update', 'configuration', 'query_store')" @click="loadUpdate">
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
<div v-if="can('delete', 'settings', 'query_store')" @click="openDeleteModal"> <div v-if="can('delete', 'configuration', 'query_store')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -4,12 +4,12 @@
<p>{{ salutation.salutation }}</p> <p>{{ salutation.salutation }}</p>
<div class="flex flex-row"> <div class="flex flex-row">
<RouterLink <RouterLink
v-if="can('update', 'settings', 'salutation')" v-if="can('update', 'configuration', 'salutation')"
:to="{ name: 'admin-settings-salutation-edit', params: { id: salutation.id } }" :to="{ name: 'admin-settings-salutation-edit', params: { id: salutation.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div v-if="can('delete', 'settings', 'salutation')" @click="openDeleteModal"> <div v-if="can('delete', 'configuration', 'salutation')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -4,7 +4,7 @@
<p>{{ template.template }}</p> <p>{{ template.template }}</p>
<div class="flex flex-row justify-end w-24"> <div class="flex flex-row justify-end w-24">
<RouterLink <RouterLink
v-if="can('update', 'settings', 'template')" v-if="can('update', 'configuration', 'template')"
:to="{ name: 'admin-settings-template-edit', params: { id: template.id } }" :to="{ name: 'admin-settings-template-edit', params: { id: template.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
@ -15,7 +15,7 @@
<Spinner v-else-if="status == 'loading'" class="my-auto" /> <Spinner v-else-if="status == 'loading'" class="my-auto" />
<SuccessCheckmark v-else-if="status?.status == 'success'" /> <SuccessCheckmark v-else-if="status?.status == 'success'" />
<FailureXMark v-else-if="status?.status == 'failed'" /> <FailureXMark v-else-if="status?.status == 'failed'" />
<div v-if="can('delete', 'settings', 'template')" @click="openDeleteModal"> <div v-if="can('delete', 'configuration', 'template')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -7,7 +7,7 @@
<EyeIcon class="w-5 h-5 p-1 box-content pointer-events-none" /> <EyeIcon class="w-5 h-5 p-1 box-content pointer-events-none" />
</button> </button>
<button <button
v-if="status == null && can('create', 'settings', 'newsletter_config')" v-if="status == null && can('create', 'configuration', 'newsletter_config')"
type="submit" type="submit"
class="!p-0 !h-fit !w-fit" class="!p-0 !h-fit !w-fit"
title="speichern" title="speichern"
@ -19,7 +19,7 @@
<FailureXMark v-else-if="status?.status == 'failed'" /> <FailureXMark v-else-if="status?.status == 'failed'" />
<button <button
type="button" type="button"
v-if="can('create', 'settings', 'newsletter_config')" v-if="can('create', 'configuration', 'newsletter_config')"
class="!p-0 !h-fit !w-fit" class="!p-0 !h-fit !w-fit"
title="zurücksetzen" title="zurücksetzen"
@click="resetForm" @click="resetForm"

View file

@ -6,7 +6,7 @@
<div @click="downloadBackup"> <div @click="downloadBackup">
<ArrowDownTrayIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <ArrowDownTrayIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
<div v-if="can('admin', 'user', 'backup')" @click="openRestoreModal"> <div v-if="can('admin', 'management', 'backup')" @click="openRestoreModal">
<BarsArrowUpIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <BarsArrowUpIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -4,18 +4,18 @@
<p>{{ role.role }} <small v-if="role.permissions.admin">(Admin)</small></p> <p>{{ role.role }} <small v-if="role.permissions.admin">(Admin)</small></p>
<div class="flex flex-row"> <div class="flex flex-row">
<RouterLink <RouterLink
v-if="can('admin', 'user', 'role')" v-if="can('admin', 'management', 'role')"
:to="{ name: 'admin-user-role-permission', params: { id: role.id } }" :to="{ name: 'admin-user-role-permission', params: { id: role.id } }"
> >
<WrenchScrewdriverIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <WrenchScrewdriverIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<RouterLink <RouterLink
v-if="can('update', 'user', 'role')" v-if="can('update', 'management', 'role')"
:to="{ name: 'admin-user-role-edit', params: { id: role.id } }" :to="{ name: 'admin-user-role-edit', params: { id: role.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div v-if="can('delete', 'user', 'role')" @click="openDeleteModal"> <div v-if="can('delete', 'management', 'role')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -3,7 +3,7 @@
<div class="bg-primary p-2 text-white flex flex-row justify-between items-center"> <div class="bg-primary p-2 text-white flex flex-row justify-between items-center">
<p>{{ invite.firstname }} {{ invite.lastname }}</p> <p>{{ invite.firstname }} {{ invite.lastname }}</p>
<div class="flex flex-row"> <div class="flex flex-row">
<div v-if="can('delete', 'user', 'user')" @click="triggerDeleteInvite"> <div v-if="can('delete', 'management', 'user')" @click="triggerDeleteInvite">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -7,25 +7,25 @@
</p> </p>
<div class="flex flex-row"> <div class="flex flex-row">
<RouterLink <RouterLink
v-if="can('admin', 'user', 'user')" v-if="can('admin', 'management', 'user')"
:to="{ name: 'admin-user-user-roles', params: { id: user.id } }" :to="{ name: 'admin-user-user-roles', params: { id: user.id } }"
> >
<UserGroupIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <UserGroupIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<RouterLink <RouterLink
v-if="can('admin', 'user', 'user')" v-if="can('admin', 'management', 'user')"
:to="{ name: 'admin-user-user-permission', params: { id: user.id } }" :to="{ name: 'admin-user-user-permission', params: { id: user.id } }"
> >
<WrenchScrewdriverIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <WrenchScrewdriverIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<RouterLink <RouterLink
v-if="can('update', 'user', 'user')" v-if="can('update', 'management', 'user')"
:to="{ name: 'admin-user-user-edit', params: { id: user.id } }" :to="{ name: 'admin-user-user-edit', params: { id: user.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div <div
v-if="can('delete', 'user', 'user')" v-if="can('delete', 'management', 'user')"
:class="user.isOwner ? 'opacity-75 pointer-events-none' : ''" :class="user.isOwner ? 'opacity-75 pointer-events-none' : ''"
@click="openDeleteModal" @click="openDeleteModal"
> >

View file

@ -3,22 +3,22 @@
<div class="bg-primary p-2 text-white flex flex-row justify-between items-center"> <div class="bg-primary p-2 text-white flex flex-row justify-between items-center">
<p>{{ webapi.title }} <small v-if="webapi.permissions.admin">(Admin)</small></p> <p>{{ webapi.title }} <small v-if="webapi.permissions.admin">(Admin)</small></p>
<div class="flex flex-row"> <div class="flex flex-row">
<div v-if="can('admin', 'user', 'webapi')" @click="openTokenViewModal"> <div v-if="can('admin', 'management', 'webapi')" @click="openTokenViewModal">
<FingerPrintIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <FingerPrintIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
<RouterLink <RouterLink
v-if="can('admin', 'user', 'webapi')" v-if="can('admin', 'management', 'webapi')"
:to="{ name: 'admin-user-webapi-permission', params: { id: webapi.id } }" :to="{ name: 'admin-user-webapi-permission', params: { id: webapi.id } }"
> >
<WrenchScrewdriverIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <WrenchScrewdriverIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<RouterLink <RouterLink
v-if="can('update', 'user', 'webapi')" v-if="can('update', 'management', 'webapi')"
:to="{ name: 'admin-user-webapi-edit', params: { id: webapi.id } }" :to="{ name: 'admin-user-webapi-edit', params: { id: webapi.id } }"
> >
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink> </RouterLink>
<div v-if="can('delete', 'user', 'webapi')" @click="openDeleteModal"> <div v-if="can('delete', 'management', 'webapi')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" /> <TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div> </div>
</div> </div>

View file

@ -27,7 +27,7 @@
</div> </div>
<div class="grow"></div> <div class="grow"></div>
<div <div
v-if="allowPredefinedSelect && can('read', 'settings', 'query_store')" v-if="allowPredefinedSelect && can('read', 'configuration', 'query_store')"
class="flex flex-row gap-2 max-lg:w-full max-lg:order-10" class="flex flex-row gap-2 max-lg:w-full max-lg:order-10"
> >
<select v-model="activeQueryId" class="max-h-[34px] !py-0"> <select v-model="activeQueryId" class="max-h-[34px] !py-0">
@ -37,7 +37,7 @@
</option> </option>
</select> </select>
<div <div
v-if="can('create', 'settings', 'query_store')" v-if="can('create', 'configuration', 'query_store')"
class="p-1 border border-gray-400 bg-gray-100 rounded-md" class="p-1 border border-gray-400 bg-gray-100 rounded-md"
title="Abfrage speichern" title="Abfrage speichern"
@click="$emit('query:save')" @click="$emit('query:save')"

View file

@ -301,21 +301,21 @@ const router = createRouter({
path: "settings", path: "settings",
name: "admin-settings", name: "admin-settings",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings" }, meta: { type: "read", section: "configuration" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
path: "", path: "",
name: "admin-settings-default", name: "admin-settings-default",
component: () => import("@/views/admin/ViewSelect.vue"), component: () => import("@/views/admin/ViewSelect.vue"),
meta: { type: "read", section: "settings" }, meta: { type: "read", section: "configuration" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
}, },
{ {
path: "qualification", path: "qualification",
name: "admin-settings-qualification-route", name: "admin-settings-qualification-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "qualification" }, meta: { type: "read", section: "configuration", module: "qualification" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -327,7 +327,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-settings-qualification-edit", name: "admin-settings-qualification-edit",
component: () => import("@/views/admin/configuration/qualification/QualificationEdit.vue"), component: () => import("@/views/admin/configuration/qualification/QualificationEdit.vue"),
meta: { type: "update", section: "settings", module: "qualification" }, meta: { type: "update", section: "configuration", module: "qualification" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -337,7 +337,7 @@ const router = createRouter({
path: "award", path: "award",
name: "admin-settings-award-route", name: "admin-settings-award-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "award" }, meta: { type: "read", section: "configuration", module: "award" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -349,7 +349,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-settings-award-edit", name: "admin-settings-award-edit",
component: () => import("@/views/admin/configuration/award/AwardEdit.vue"), component: () => import("@/views/admin/configuration/award/AwardEdit.vue"),
meta: { type: "update", section: "settings", module: "award" }, meta: { type: "update", section: "configuration", module: "award" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -359,21 +359,21 @@ const router = createRouter({
path: "executive-position", path: "executive-position",
name: "admin-settings-executive_position-route", name: "admin-settings-executive_position-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "executive_position" }, meta: { type: "read", section: "configuration", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
path: "", path: "",
name: "admin-settings-executive_position", name: "admin-settings-executive_position",
component: () => import("@/views/admin/configuration/executivePosition/ExecutivePosition.vue"), component: () => import("@/views/admin/configuration/executivePosition/ExecutivePosition.vue"),
meta: { type: "read", section: "settings", module: "executive_position" }, meta: { type: "read", section: "configuration", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
}, },
{ {
path: ":id/edit", path: ":id/edit",
name: "admin-settings-executive_position-edit", name: "admin-settings-executive_position-edit",
component: () => import("@/views/admin/configuration/executivePosition/ExecutivePositionEdit.vue"), component: () => import("@/views/admin/configuration/executivePosition/ExecutivePositionEdit.vue"),
meta: { type: "update", section: "settings", module: "executive_position" }, meta: { type: "update", section: "configuration", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -383,7 +383,7 @@ const router = createRouter({
path: "communication-type", path: "communication-type",
name: "admin-settings-communication_type-route", name: "admin-settings-communication_type-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "communication_type" }, meta: { type: "read", section: "configuration", module: "communication_type" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -395,7 +395,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-settings-communication_type-edit", name: "admin-settings-communication_type-edit",
component: () => import("@/views/admin/configuration/communicationType/CommunicationTypeEdit.vue"), component: () => import("@/views/admin/configuration/communicationType/CommunicationTypeEdit.vue"),
meta: { type: "update", section: "settings", module: "communication_type" }, meta: { type: "update", section: "configuration", module: "communication_type" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -405,7 +405,7 @@ const router = createRouter({
path: "status", path: "status",
name: "admin-settings-membership_status-route", name: "admin-settings-membership_status-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "membership_status" }, meta: { type: "read", section: "configuration", module: "membership_status" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -417,7 +417,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-settings-membership_status-edit", name: "admin-settings-membership_status-edit",
component: () => import("@/views/admin/configuration/membershipStatus/MembershipStatusEdit.vue"), component: () => import("@/views/admin/configuration/membershipStatus/MembershipStatusEdit.vue"),
meta: { type: "update", section: "settings", module: "membership_status" }, meta: { type: "update", section: "configuration", module: "membership_status" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -427,7 +427,7 @@ const router = createRouter({
path: "salutation", path: "salutation",
name: "admin-settings-salutation-route", name: "admin-settings-salutation-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "salutation" }, meta: { type: "read", section: "configuration", module: "salutation" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -439,7 +439,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-settings-salutation-edit", name: "admin-settings-salutation-edit",
component: () => import("@/views/admin/configuration/salutation/SalutationEdit.vue"), component: () => import("@/views/admin/configuration/salutation/SalutationEdit.vue"),
meta: { type: "update", section: "settings", module: "salutation" }, meta: { type: "update", section: "configuration", module: "salutation" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -449,7 +449,7 @@ const router = createRouter({
path: "calendar-type", path: "calendar-type",
name: "admin-settings-calendar_type-route", name: "admin-settings-calendar_type-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "calendar_type" }, meta: { type: "read", section: "configuration", module: "calendar_type" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -461,7 +461,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-settings-calendar_type-edit", name: "admin-settings-calendar_type-edit",
component: () => import("@/views/admin/configuration/calendarType/CalendarTypeEdit.vue"), component: () => import("@/views/admin/configuration/calendarType/CalendarTypeEdit.vue"),
meta: { type: "update", section: "settings", module: "calendar_type" }, meta: { type: "update", section: "configuration", module: "calendar_type" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -471,14 +471,14 @@ const router = createRouter({
path: "query-store", path: "query-store",
name: "admin-settings-query_store", name: "admin-settings-query_store",
component: () => import("@/views/admin/configuration/queryStore/QueryStore.vue"), component: () => import("@/views/admin/configuration/queryStore/QueryStore.vue"),
meta: { type: "read", section: "settings", module: "query_store" }, meta: { type: "read", section: "configuration", module: "query_store" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
}, },
{ {
path: "template", path: "template",
name: "admin-settings-template-route", name: "admin-settings-template-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "template" }, meta: { type: "read", section: "configuration", module: "template" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -496,7 +496,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-settings-template-edit", name: "admin-settings-template-edit",
component: () => import("@/views/admin/configuration/template/TemplateEdit.vue"), component: () => import("@/views/admin/configuration/template/TemplateEdit.vue"),
meta: { type: "update", section: "settings", module: "template" }, meta: { type: "update", section: "configuration", module: "template" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -506,14 +506,14 @@ const router = createRouter({
path: "template-usage", path: "template-usage",
name: "admin-settings-template_usage", name: "admin-settings-template_usage",
component: () => import("@/views/admin/configuration/templateUsage/TemplateUsage.vue"), component: () => import("@/views/admin/configuration/templateUsage/TemplateUsage.vue"),
meta: { type: "read", section: "settings", module: "template_usage" }, meta: { type: "read", section: "configuration", module: "template_usage" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
}, },
{ {
path: "newsletter-config", path: "newsletter-config",
name: "admin-settings-newsletter_config", name: "admin-settings-newsletter_config",
component: () => import("@/views/admin/configuration/newsletterConfig/NewsletterConfig.vue"), component: () => import("@/views/admin/configuration/newsletterConfig/NewsletterConfig.vue"),
meta: { type: "read", section: "settings", module: "newsletter_config" }, meta: { type: "read", section: "configuration", module: "newsletter_config" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
}, },
], ],
@ -522,21 +522,21 @@ const router = createRouter({
path: "user", path: "user",
name: "admin-user", name: "admin-user",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "user" }, meta: { type: "read", section: "management" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
path: "", path: "",
name: "admin-user-default", name: "admin-user-default",
component: () => import("@/views/admin/ViewSelect.vue"), component: () => import("@/views/admin/ViewSelect.vue"),
meta: { type: "read", section: "user" }, meta: { type: "read", section: "management" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
}, },
{ {
path: "user", path: "user",
name: "admin-user-user-route", name: "admin-user-user-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "user", module: "user" }, meta: { type: "read", section: "management", module: "user" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -553,7 +553,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-user-user-edit", name: "admin-user-user-edit",
component: () => import("@/views/admin/management/user/UserEdit.vue"), component: () => import("@/views/admin/management/user/UserEdit.vue"),
meta: { type: "update", section: "user", module: "user" }, meta: { type: "update", section: "management", module: "user" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -561,7 +561,7 @@ const router = createRouter({
path: ":id/permission", path: ":id/permission",
name: "admin-user-user-permission", name: "admin-user-user-permission",
component: () => import("@/views/admin/management/user/UserEditPermission.vue"), component: () => import("@/views/admin/management/user/UserEditPermission.vue"),
meta: { type: "update", section: "user", module: "user" }, meta: { type: "update", section: "management", module: "user" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -569,7 +569,7 @@ const router = createRouter({
path: ":id/roles", path: ":id/roles",
name: "admin-user-user-roles", name: "admin-user-user-roles",
component: () => import("@/views/admin/management/user/UserEditRoles.vue"), component: () => import("@/views/admin/management/user/UserEditRoles.vue"),
meta: { type: "update", section: "user", module: "user" }, meta: { type: "update", section: "management", module: "user" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -579,7 +579,7 @@ const router = createRouter({
path: "role", path: "role",
name: "admin-user-role-route", name: "admin-user-role-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "user", module: "role" }, meta: { type: "read", section: "management", module: "role" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -591,7 +591,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-user-role-edit", name: "admin-user-role-edit",
component: () => import("@/views/admin/management/role/RoleEdit.vue"), component: () => import("@/views/admin/management/role/RoleEdit.vue"),
meta: { type: "update", section: "user", module: "role" }, meta: { type: "update", section: "management", module: "role" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -599,7 +599,7 @@ const router = createRouter({
path: ":id/permission", path: ":id/permission",
name: "admin-user-role-permission", name: "admin-user-role-permission",
component: () => import("@/views/admin/management/role/RoleEditPermission.vue"), component: () => import("@/views/admin/management/role/RoleEditPermission.vue"),
meta: { type: "update", section: "user", module: "role" }, meta: { type: "update", section: "management", module: "role" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -609,7 +609,7 @@ const router = createRouter({
path: "webapi", path: "webapi",
name: "admin-user-webapi-route", name: "admin-user-webapi-route",
component: () => import("@/views/RouterView.vue"), component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "user", module: "webapi" }, meta: { type: "read", section: "management", module: "webapi" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -621,7 +621,7 @@ const router = createRouter({
path: ":id/edit", path: ":id/edit",
name: "admin-user-webapi-edit", name: "admin-user-webapi-edit",
component: () => import("@/views/admin/management/webapi/WebapiEdit.vue"), component: () => import("@/views/admin/management/webapi/WebapiEdit.vue"),
meta: { type: "update", section: "user", module: "webapi" }, meta: { type: "update", section: "management", module: "webapi" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -629,7 +629,7 @@ const router = createRouter({
path: ":id/permission", path: ":id/permission",
name: "admin-user-webapi-permission", name: "admin-user-webapi-permission",
component: () => import("@/views/admin/management/webapi/WebapiEditPermission.vue"), component: () => import("@/views/admin/management/webapi/WebapiEditPermission.vue"),
meta: { type: "update", section: "user", module: "webapi" }, meta: { type: "update", section: "management", module: "webapi" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
}, },
@ -639,7 +639,7 @@ const router = createRouter({
path: "backup", path: "backup",
name: "admin-user-backup-route", name: "admin-user-backup-route",
component: () => import("@/views/admin/management/backup/BackupRouting.vue"), component: () => import("@/views/admin/management/backup/BackupRouting.vue"),
meta: { type: "read", section: "user", module: "backup" }, meta: { type: "read", section: "management", module: "backup" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
children: [ children: [
{ {
@ -778,6 +778,7 @@ export default router;
declare module "vue-router" { declare module "vue-router" {
interface RouteMeta { interface RouteMeta {
admin?: boolean;
type?: PermissionType | "admin"; type?: PermissionType | "admin";
section?: PermissionSection; section?: PermissionSection;
module?: PermissionModule; module?: PermissionModule;

View file

@ -38,7 +38,7 @@ export const useQueryStoreStore = defineStore("queryStore", {
const queryBuilderStore = useQueryBuilderStore(); const queryBuilderStore = useQueryBuilderStore();
const modalStore = useModalStore(); const modalStore = useModalStore();
const abilityStore = useAbilityStore(); const abilityStore = useAbilityStore();
if (queryBuilderStore.activeQueryId != undefined && abilityStore.can("update", "settings", "query_store")) { if (queryBuilderStore.activeQueryId != undefined && abilityStore.can("update", "configuration", "query_store")) {
modalStore.openModal( modalStore.openModal(
markRaw( markRaw(
defineAsyncComponent(() => import("@/components/admin/configuration/queryStore/UpdateQueryStoreModal.vue")) defineAsyncComponent(() => import("@/components/admin/configuration/queryStore/UpdateQueryStoreModal.vue"))

View file

@ -58,7 +58,7 @@ export const useNavigationStore = defineStore("navigation", {
} as topLevelNavigationModel, } as topLevelNavigationModel,
] ]
: []), : []),
...(abilityStore.canSection("read", "settings") ...(abilityStore.canSection("read", "configuration")
? [ ? [
{ {
key: "settings", key: "settings",
@ -67,7 +67,7 @@ export const useNavigationStore = defineStore("navigation", {
} as topLevelNavigationModel, } as topLevelNavigationModel,
] ]
: []), : []),
...(abilityStore.canSection("read", "user") ...(abilityStore.canSection("read", "management")
? [ ? [
{ {
key: "user", key: "user",
@ -99,41 +99,45 @@ export const useNavigationStore = defineStore("navigation", {
mainTitle: "Einstellungen", mainTitle: "Einstellungen",
main: [ main: [
{ key: "divider1", title: "Mitgliederdaten" }, { key: "divider1", title: "Mitgliederdaten" },
...(abilityStore.can("read", "settings", "salutation") ? [{ key: "salutation", title: "Anrede" }] : []), ...(abilityStore.can("read", "configuration", "salutation")
...(abilityStore.can("read", "settings", "award") ? [{ key: "award", title: "Auszeichnungen" }] : []), ? [{ key: "salutation", title: "Anrede" }]
...(abilityStore.can("read", "settings", "communication_type") : []),
...(abilityStore.can("read", "configuration", "award") ? [{ key: "award", title: "Auszeichnungen" }] : []),
...(abilityStore.can("read", "configuration", "communication_type")
? [{ key: "communication_type", title: "Kommunikationsarten" }] ? [{ key: "communication_type", title: "Kommunikationsarten" }]
: []), : []),
...(abilityStore.can("read", "settings", "membership_status") ...(abilityStore.can("read", "configuration", "membership_status")
? [{ key: "membership_status", title: "Mitgliedsstatus" }] ? [{ key: "membership_status", title: "Mitgliedsstatus" }]
: []), : []),
...(abilityStore.can("read", "settings", "qualification") ...(abilityStore.can("read", "configuration", "qualification")
? [{ key: "qualification", title: "Qualifikationen" }] ? [{ key: "qualification", title: "Qualifikationen" }]
: []), : []),
...(abilityStore.can("read", "settings", "executive_position") ...(abilityStore.can("read", "configuration", "executive_position")
? [{ key: "executive_position", title: "Vereinsämter" }] ? [{ key: "executive_position", title: "Vereinsämter" }]
: []), : []),
{ key: "divider2", title: "Einstellungen" }, { key: "divider2", title: "Einstellungen" },
...(abilityStore.can("read", "settings", "newsletter_config") ...(abilityStore.can("read", "configuration", "newsletter_config")
? [{ key: "newsletter_config", title: "Newsletter Konfiguration" }] ? [{ key: "newsletter_config", title: "Newsletter Konfiguration" }]
: []), : []),
...(abilityStore.can("read", "settings", "template") ? [{ key: "template", title: "Templates" }] : []), ...(abilityStore.can("read", "configuration", "template") ? [{ key: "template", title: "Templates" }] : []),
...(abilityStore.can("read", "settings", "template_usage") ...(abilityStore.can("read", "configuration", "template_usage")
? [{ key: "template_usage", title: "Template-Verwendung" }] ? [{ key: "template_usage", title: "Template-Verwendung" }]
: []), : []),
...(abilityStore.can("read", "settings", "calendar_type") ...(abilityStore.can("read", "configuration", "calendar_type")
? [{ key: "calendar_type", title: "Terminarten" }] ? [{ key: "calendar_type", title: "Terminarten" }]
: []), : []),
...(abilityStore.can("read", "settings", "query") ? [{ key: "query_store", title: "Query Store" }] : []), ...(abilityStore.can("read", "configuration", "query")
? [{ key: "query_store", title: "Query Store" }]
: []),
], ],
}, },
user: { user: {
mainTitle: "Benutzer", mainTitle: "Benutzer",
main: [ main: [
...(abilityStore.can("read", "user", "user") ? [{ key: "user", title: "Benutzer" }] : []), ...(abilityStore.can("read", "management", "user") ? [{ key: "user", title: "Benutzer" }] : []),
...(abilityStore.can("read", "user", "role") ? [{ key: "role", title: "Rollen" }] : []), ...(abilityStore.can("read", "management", "role") ? [{ key: "role", title: "Rollen" }] : []),
...(abilityStore.can("read", "user", "webapi") ? [{ key: "webapi", title: "Webapi-Token" }] : []), ...(abilityStore.can("read", "management", "webapi") ? [{ key: "webapi", title: "Webapi-Token" }] : []),
...(abilityStore.can("read", "user", "backup") ? [{ key: "backup", title: "Backups" }] : []), ...(abilityStore.can("read", "management", "backup") ? [{ key: "backup", title: "Backups" }] : []),
...(abilityStore.isAdmin() ? [{ key: "version", title: "Version" }] : []), ...(abilityStore.isAdmin() ? [{ key: "version", title: "Version" }] : []),
], ],
}, },

View file

@ -1,4 +1,4 @@
export type PermissionSection = "club" | "settings" | "user"; export type PermissionSection = "club" | "configuration" | "management";
export type PermissionModule = export type PermissionModule =
| "member" | "member"
@ -43,7 +43,7 @@ export type SectionsAndModulesObject = {
[section in PermissionSection]: Array<PermissionModule>; [section in PermissionSection]: Array<PermissionModule>;
}; };
export const permissionSections: Array<PermissionSection> = ["club", "settings", "user"]; export const permissionSections: Array<PermissionSection> = ["club", "configuration", "management"];
export const permissionModules: Array<PermissionModule> = [ export const permissionModules: Array<PermissionModule> = [
"member", "member",
"calendar", "calendar",
@ -69,7 +69,7 @@ export const permissionModules: Array<PermissionModule> = [
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"]; export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
export const sectionsAndModules: SectionsAndModulesObject = { export const sectionsAndModules: SectionsAndModulesObject = {
club: ["member", "calendar", "newsletter", "protocol", "query"], club: ["member", "calendar", "newsletter", "protocol", "query"],
settings: [ configuration: [
"qualification", "qualification",
"award", "award",
"executive_position", "executive_position",
@ -82,5 +82,5 @@ export const sectionsAndModules: SectionsAndModulesObject = {
"template_usage", "template_usage",
"newsletter_config", "newsletter_config",
], ],
user: ["user", "role", "webapi", "backup"], management: ["user", "role", "webapi", "backup"],
}; };

View file

@ -83,7 +83,7 @@ export default defineComponent({
}; };
}, },
sortedPresence() { sortedPresence() {
return this.presence.toSorted((a, b) => { return this.presence.slice().sort((a, b) => {
const memberA = this.getMember(a.memberId); const memberA = this.getMember(a.memberId);
const memberB = this.getMember(b.memberId); const memberB = this.getMember(b.memberId);
return `${memberA?.lastname}, ${memberA?.firstname}`.localeCompare( return `${memberA?.lastname}, ${memberA?.firstname}`.localeCompare(

View file

@ -11,7 +11,7 @@
<AwardListItem v-for="award in awards" :key="award.id" :award="award" /> <AwardListItem v-for="award in awards" :key="award.id" :award="award" />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'settings', 'award')" primary class="!w-fit" @click="openCreateModal"> <button v-if="can('create', 'configuration', 'award')" primary class="!w-fit" @click="openCreateModal">
Auszeichnung erstellen Auszeichnung erstellen
</button> </button>
</div> </div>

View file

@ -15,7 +15,12 @@
/> />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'settings', 'calendar_type')" primary class="!w-fit" @click="openCreateModal"> <button
v-if="can('create', 'configuration', 'calendar_type')"
primary
class="!w-fit"
@click="openCreateModal"
>
Termintyp erstellen Termintyp erstellen
</button> </button>
</div> </div>

View file

@ -16,7 +16,7 @@
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button <button
v-if="can('create', 'settings', 'communication_type')" v-if="can('create', 'configuration', 'communication_type')"
primary primary
class="!w-fit" class="!w-fit"
@click="openCreateModal" @click="openCreateModal"

View file

@ -16,7 +16,7 @@
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button <button
v-if="can('create', 'settings', 'executive_position')" v-if="can('create', 'configuration', 'executive_position')"
primary primary
class="!w-fit" class="!w-fit"
@click="openCreateModal" @click="openCreateModal"

View file

@ -11,7 +11,12 @@
<MembershipStatusListItem v-for="status in membershipStatus" :key="status.id" :membershipStatus="status" /> <MembershipStatusListItem v-for="status in membershipStatus" :key="status.id" :membershipStatus="status" />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'settings', 'membership_status')" primary class="!w-fit" @click="openCreateModal"> <button
v-if="can('create', 'configuration', 'membership_status')"
primary
class="!w-fit"
@click="openCreateModal"
>
Mitgliedsstatus erstellen Mitgliedsstatus erstellen
</button> </button>
</div> </div>

View file

@ -15,7 +15,12 @@
/> />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'settings', 'qualification')" primary class="!w-fit" @click="openCreateModal"> <button
v-if="can('create', 'configuration', 'qualification')"
primary
class="!w-fit"
@click="openCreateModal"
>
Qualifikation erstellen Qualifikation erstellen
</button> </button>
</div> </div>

View file

@ -12,7 +12,7 @@
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<RouterLink <RouterLink
v-if="can('create', 'settings', 'query_store')" v-if="can('create', 'configuration', 'query_store')"
:to="{ name: 'admin-club-query_builder' }" :to="{ name: 'admin-club-query_builder' }"
button button
primary primary

View file

@ -11,7 +11,7 @@
<SalutationListItem v-for="salutation in salutations" :key="salutation.id" :salutation="salutation" /> <SalutationListItem v-for="salutation in salutations" :key="salutation.id" :salutation="salutation" />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'settings', 'salutation')" primary class="!w-fit" @click="openCreateModal"> <button v-if="can('create', 'configuration', 'salutation')" primary class="!w-fit" @click="openCreateModal">
Anrede erstellen Anrede erstellen
</button> </button>
</div> </div>

View file

@ -14,7 +14,7 @@
<TemplateListItem v-for="template in templates" :key="template.id" :template="template" /> <TemplateListItem v-for="template in templates" :key="template.id" :template="template" />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'settings', 'template')" primary class="!w-fit" @click="openCreateModal"> <button v-if="can('create', 'configuration', 'template')" primary class="!w-fit" @click="openCreateModal">
Template erstellen Template erstellen
</button> </button>
</div> </div>

View file

@ -4,7 +4,7 @@
<BackupListItem v-for="backup in backups" :key="backup" :backup="backup" /> <BackupListItem v-for="backup in backups" :key="backup" :backup="backup" />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'user', 'backup')" primary class="!w-fit" @click="openCreateModal"> <button v-if="can('create', 'management', 'backup')" primary class="!w-fit" @click="openCreateModal">
Backup erstellen Backup erstellen
</button> </button>
</div> </div>

View file

@ -4,7 +4,7 @@
<BackupListItem v-for="backup in backups" :key="backup" :backup="backup" /> <BackupListItem v-for="backup in backups" :key="backup" :backup="backup" />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'user', 'backup')" primary class="!w-fit" @click="openUploadModal"> <button v-if="can('create', 'management', 'backup')" primary class="!w-fit" @click="openUploadModal">
Backup hochladen Backup hochladen
</button> </button>
</div> </div>

View file

@ -11,7 +11,7 @@
<RoleListItem v-for="role in roles" :key="role.id" :role="role" /> <RoleListItem v-for="role in roles" :key="role.id" :role="role" />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'user', 'role')" primary class="!w-fit" @click="openCreateModal"> <button v-if="can('create', 'management', 'role')" primary class="!w-fit" @click="openCreateModal">
Rolle erstellen Rolle erstellen
</button> </button>
</div> </div>

View file

@ -11,7 +11,7 @@
<UserListItem v-for="user in users" :key="user.id" :user="user" /> <UserListItem v-for="user in users" :key="user.id" :user="user" />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'user', 'user')" primary class="!w-fit" @click="inviteUser"> <button v-if="can('create', 'management', 'user')" primary class="!w-fit" @click="inviteUser">
Nutzer einladen Nutzer einladen
</button> </button>
<RouterLink button primary-outline :to="{ name: 'admin-user-user-invites' }" class="!w-fit"> <RouterLink button primary-outline :to="{ name: 'admin-user-user-invites' }" class="!w-fit">

View file

@ -11,7 +11,7 @@
<WebapiListItem v-for="webapi in webapis" :key="webapi.id" :webapi="webapi" /> <WebapiListItem v-for="webapi in webapis" :key="webapi.id" :webapi="webapi" />
</div> </div>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
<button v-if="can('create', 'user', 'webapi')" primary class="!w-fit" @click="openCreateModal"> <button v-if="can('create', 'management', 'webapi')" primary class="!w-fit" @click="openCreateModal">
Webapi-Token erstellen Webapi-Token erstellen
</button> </button>
</div> </div>