From f22d423fff62bdcf3a9a6f59033d7a5fed9035d9 Mon Sep 17 00:00:00 2001 From: Gregor Vostrak Date: Thu, 25 Apr 2024 04:12:10 +0200 Subject: [PATCH] hide actions and pages in the frontend according to permissions --- app/Http/Middleware/ShareInertiaData.php | 2 +- .../Client/ClientMoreOptionsDropdown.vue | 2 + .../Components/Common/Client/ClientTable.vue | 6 +- .../Member/MemberMoreOptionsDropdown.vue | 2 + .../Common/Member/MemberTableRow.vue | 6 +- .../Project/ProjectMoreOptionsDropdown.vue | 3 + .../Common/Project/ProjectTable.vue | 6 +- .../js/Components/Common/Tag/TagTable.vue | 10 ++- .../js/Components/Common/Tag/TagTableRow.vue | 2 + .../js/Components/Common/Task/TaskTable.vue | 10 ++- .../js/Components/OrganizationSwitcher.vue | 5 +- resources/js/Layouts/AppLayout.vue | 10 +++ resources/js/Pages/Clients.vue | 6 +- resources/js/Pages/Members.vue | 6 +- resources/js/Pages/ProjectShow.vue | 4 +- resources/js/Pages/Projects.vue | 6 +- resources/js/Pages/Tags.vue | 6 +- .../Teams/Partials/UpdateTeamNameForm.vue | 5 +- resources/js/Pages/Teams/Show.vue | 5 +- resources/js/utils/init.ts | 9 +- resources/js/utils/permissions.ts | 83 +++++++++++++++++++ 21 files changed, 176 insertions(+), 18 deletions(-) create mode 100644 resources/js/utils/permissions.ts diff --git a/app/Http/Middleware/ShareInertiaData.php b/app/Http/Middleware/ShareInertiaData.php index 92a1dcca..cbe154f3 100644 --- a/app/Http/Middleware/ShareInertiaData.php +++ b/app/Http/Middleware/ShareInertiaData.php @@ -27,7 +27,6 @@ class ShareInertiaData /** @var PermissionStore $permissions */ $permissions = app(PermissionStore::class); Inertia::share(array_filter([ - 'permissions' => $request->user() !== null && $request->user()->currentTeam !== null ? $permissions->getPermissions($request->user()->currentTeam) : [], 'jetstream' => function () use ($request) { /** @var User|null $user */ $user = $request->user(); @@ -49,6 +48,7 @@ class ShareInertiaData ]; }, 'auth' => [ + 'permissions' => $request->user() !== null && $request->user()->currentTeam !== null ? $permissions->getPermissions($request->user()->currentTeam) : [], 'user' => function () use ($request): array { /** @var User|null $user */ $user = $request->user(); diff --git a/resources/js/Components/Common/Client/ClientMoreOptionsDropdown.vue b/resources/js/Components/Common/Client/ClientMoreOptionsDropdown.vue index 2ab8e438..a57b9f9b 100644 --- a/resources/js/Components/Common/Client/ClientMoreOptionsDropdown.vue +++ b/resources/js/Components/Common/Client/ClientMoreOptionsDropdown.vue @@ -2,6 +2,7 @@ import Dropdown from '@/Components/Dropdown.vue'; import { TrashIcon } from '@heroicons/vue/20/solid'; import type { Client } from '@/utils/api'; +import { canDeleteClients } from '@/utils/permissions'; const emit = defineEmits<{ delete: []; @@ -31,6 +32,7 @@ const props = defineProps<{