From bd343277cc0dd4342df589687f12f8570fccca61 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Mon, 6 Oct 2025 16:39:50 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=9B=82=20update=20claims=20permiss?= =?UTF-8?q?ions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Policies/ClaimPolicy.php | 64 ++++--- .../views/bo/pages/claims/edit.blade.php | 165 ++++++++++-------- .../views/bo/pages/claims/index.blade.php | 15 +- 3 files changed, 133 insertions(+), 111 deletions(-) diff --git a/app/Policies/ClaimPolicy.php b/app/Policies/ClaimPolicy.php index 0d4c23a..a6ea601 100644 --- a/app/Policies/ClaimPolicy.php +++ b/app/Policies/ClaimPolicy.php @@ -3,6 +3,7 @@ namespace App\Policies; use App\Enums\Users\RoleEnum; +use App\Models\Claim; use App\Models\User; use Illuminate\Auth\Access\HandlesAuthorization; use App\Policies\Rules\UserStaticRules as USR; @@ -12,16 +13,6 @@ class ClaimPolicy { use HandlesAuthorization; - /** - * View a Claim. - * - * @return boolean - */ - public function view(): bool - { - return USR::everyOne(); - } - /** * View any a Claim. * @@ -35,21 +26,25 @@ class ClaimPolicy /** * Preview a Claim. * + * @param \App\Models\User $authUser + * @param \App\Models\Claim $claim * @return boolean */ - public function preview(): bool + public function preview(User $authUser, Claim $claim): bool { - return USR::everyOne(); + return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim); } /** * Update a Claim. * + * @param \App\Models\User $authUser + * @param \App\Models\Claim $claim * @return boolean */ - public function update(): bool + public function update(User $authUser, Claim $claim): bool { - return USR::everyOne(); + return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim); } /** @@ -66,40 +61,65 @@ class ClaimPolicy /** * Determine whether the user can update the associated subject of the model. * + * @param \App\Models\User $authUser + * @param \App\Models\Claim $claim * @return boolean */ - public function updateSubject(): bool + public function updateSubject(User $authUser, Claim $claim): bool { - return USR::everyOne(); + return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim); } /** * Update a Claim. * + * @param \App\Models\User $authUser + * @param \App\Models\Claim $claim * @return boolean */ - public function updateType(): bool + public function updateType(User $authUser, Claim $claim): bool { - return USR::everyOne(); + return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim); } /** * Update a Claim. * + * @param \App\Models\User $authUser + * @param \App\Models\Claim $claim * @return boolean */ - public function updateStatus(): bool + public function updateStatus(User $authUser, Claim $claim): bool { - return USR::everyOne(); + return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim); } /** * Update a Claim. * + * @param \App\Models\User $authUser + * @param \App\Models\Claim $claim * @return boolean */ - public function updateResponseType(): bool + public function updateResponseType(User $authUser, Claim $claim): bool { - return USR::everyOne(); + return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim); + } + + /** + * Check if the user an access a specific resource. + * + * @param \App\Models\User $authUser + * @param \App\Models\Claim $claim + * @return boolean + */ + private function checkOnlyMinAdminOrInUserBrands(User $authUser, Claim $claim): bool + { + $userBrandModelKeys = $authUser->brands->modelKeys(); + $claimModelKey = $claim->brand->getKey(); + return UserStaticRules::atLeastRole($authUser, RoleEnum::admin) || ( + UserStaticRules::atLeastRole($authUser, RoleEnum::marketing) + && \in_array($claimModelKey, $userBrandModelKeys) + ); } } diff --git a/resources/views/bo/pages/claims/edit.blade.php b/resources/views/bo/pages/claims/edit.blade.php index 926c5c7..1ad0110 100644 --- a/resources/views/bo/pages/claims/edit.blade.php +++ b/resources/views/bo/pages/claims/edit.blade.php @@ -5,90 +5,101 @@ @section('breadcrumb', request()->route()->getName()) @section('content') -
- {{-- TITLE --}} -
-
- - - - @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $claimModel]) +
+
+
+
+ @can('viewAny', $claimModel) + + + + @endcan + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $claimModel]) +
- {{-- CLAIM AUTHOR --}} -
-
-
-
-
-
{{ trim(sprintf('%s %s', $claimModel->first_name, $claimModel->last_name)) }}
-

{{ e($claimModel->email) }}

- @if ($claimModel->customer && auth()->user()->can('view', $claimModel->customer)) - - {{ __('Lien vers la fiche client') }} - - - @endif - @if ($claimModel->getFormatedAddress()) -

{{ $claimModel->getFormatedAddress() ? e($claimModel->getFormatedAddress()) : null }}

- @endif -
-
-
$claimModel->message])'>
- @if($claimModel->file) -
-

Fichier:

- - {{ __('Voir la pièce jointe associée') }} +
+ {{-- CLAIM AUTHOR --}} +
+
+
+ +
+
$claimModel->message])'>
+ @if ($claimModel->file) + + @endif +
-
- {{-- ACTIONS / CONVERSATION--}} -
- @php - $data = [ - 'authUserId' => auth('backend')->user()->getKey(), - 'claimModel' => $claimModel, - 'brandModels' => $brandModels ?? [], - 'claimSubjectModels' => $claimSubjectModels ?? [], - 'claimMessageModels' => $claimMessageModels, - 'claimTemplateModels' => $claimTemplateModels, - 'enums' => [ - 'claimType' => \App\Enums\Claims\ClaimType::toArray(), - 'claimStatus' => \App\Enums\Claims\ClaimStatus::toArray(), - 'claimResponseType' => \App\Enums\Claims\ClaimResponseType::toArray(), - ], - 'can' => [ - 'updateBrand' => Gate::check('updateBrand', \App\Models\Claim::class), - 'updateSubject' => Gate::check('updateSubject', \App\Models\Claim::class), - 'updateType' => Gate::check('updateType', \App\Models\Claim::class), - 'updateStatus' => Gate::check('updateStatus', \App\Models\Claim::class), - 'updateResponseType' => Gate::check('updateResponseType', \App\Models\Claim::class), - ], - 'allErrors' => $errors->getBag('default')->getMessages() ?? [], - ]; - @endphp -
-
- {{-- OTHER CUSTOMER CLAIMS --}} - @if ($customerClaimModels->count()) -
-

{{ __('Autres réclas du même demandeur') }}

-
- @include('bo.pages.claims.index-list', ['claimModels' => $customerClaimModels]) -
- {!! $customerClaimModels->links() !!} + {{-- ACTIONS / CONVERSATION --}} +
+ @php + $data = [ + 'authUserId' => auth('backend')->user()->getKey(), + 'claimModel' => $claimModel, + 'brandModels' => $brandModels ?? [], + 'claimSubjectModels' => $claimSubjectModels ?? [], + 'claimMessageModels' => $claimMessageModels, + 'claimTemplateModels' => $claimTemplateModels, + 'enums' => [ + 'claimType' => \App\Enums\Claims\ClaimType::toArray(), + 'claimStatus' => \App\Enums\Claims\ClaimStatus::toArray(), + 'claimResponseType' => \App\Enums\Claims\ClaimResponseType::toArray(), + ], + 'can' => [ + 'updateBrand' => Gate::check('updateBrand', $claimModel), + 'updateSubject' => Gate::check('updateSubject', $claimModel), + 'updateType' => Gate::check('updateType', $claimModel), + 'updateStatus' => Gate::check('updateStatus', $claimModel), + 'updateResponseType' => Gate::check('updateResponseType', $claimModel), + ], + 'allErrors' => $errors->getBag('default')->getMessages() ?? [], + ]; + @endphp +
- @endif + {{-- OTHER CUSTOMER CLAIMS --}} + @if ($customerClaimModels->count()) +
+

{{ __('Autres réclas du même demandeur') }}

+
+ @include('bo.pages.claims.index-list', ['claimModels' => $customerClaimModels]) +
+ {!! $customerClaimModels->links() !!} +
+ @endif +
@endsection diff --git a/resources/views/bo/pages/claims/index.blade.php b/resources/views/bo/pages/claims/index.blade.php index 3036061..56563b1 100644 --- a/resources/views/bo/pages/claims/index.blade.php +++ b/resources/views/bo/pages/claims/index.blade.php @@ -1,7 +1,8 @@ @extends('bo.layout') -@section('title', __('models.classes.claims')) -@section('description', __('Liste de toutes les :model', ['model' => __('models.classes.claims')])) +@section('title', sprintf('%s - %s', __('models.classes.claims'), str(__('liste'))->ucfirst())) +@section('description', __('Listage de toutes les :model', ['model' => __('models.classes.claims')])) +@section('metaIndex', 'noindex,nofollow') @section('content')
@@ -12,16 +13,6 @@
@include('modules.breadcrumbs.breadcrumb-body')
-
-
- @can('create', \App\Models\Claim::class) - - - - @endcan -
-