From 275357024ffb5454f5369161c364eae4dc4c6ddc Mon Sep 17 00:00:00 2001 From: TR Tajim Date: Thu, 8 Oct 2026 17:04:43 +0600 Subject: [PATCH 1/5] feat(blogs): allow authors to edit their own blogs via BlogPolicy --- app/Http/Controllers/Admin/BlogController.php | 6 +++++ app/Http/Requests/Blog/UpdateBlogRequest.php | 5 +++- app/Policies/BlogPolicy.php | 25 +++++++++++++++++++ resources/js/components/BlogRow.vue | 22 ++++++++++++---- routes/admin.php | 2 +- 5 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 app/Policies/BlogPolicy.php diff --git a/app/Http/Controllers/Admin/BlogController.php b/app/Http/Controllers/Admin/BlogController.php index 6760835e..78f37454 100644 --- a/app/Http/Controllers/Admin/BlogController.php +++ b/app/Http/Controllers/Admin/BlogController.php @@ -7,6 +7,7 @@ use App\Http\Requests\Blog\UpdateBlogRequest; use App\Models\Blog; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Storage; use Inertia\Inertia; @@ -28,6 +29,7 @@ public function create() public function edit(Blog $blog) { + Gate::authorize('update', $blog); return Inertia::render('admin/BlogCreateOrEdit', [ 'blog' => $blog, @@ -54,6 +56,8 @@ public function store(StoreBlogRequest $request) public function update(UpdateBlogRequest $request, Blog $blog) { + Gate::authorize('update', $blog); + $data = $request->validated(); if ($request->hasFile('featured_image')) { @@ -80,6 +84,8 @@ public function update(UpdateBlogRequest $request, Blog $blog) public function destroy(Blog $blog) { + Gate::authorize('delete', $blog); + if ($blog->featured_image_path) { Storage::delete($blog->featured_image_path); diff --git a/app/Http/Requests/Blog/UpdateBlogRequest.php b/app/Http/Requests/Blog/UpdateBlogRequest.php index e8e4d048..4961c652 100644 --- a/app/Http/Requests/Blog/UpdateBlogRequest.php +++ b/app/Http/Requests/Blog/UpdateBlogRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Requests\Blog; +use App\Models\Blog; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Str; use Illuminate\Validation\Rule; @@ -10,7 +11,9 @@ class UpdateBlogRequest extends FormRequest { public function authorize(): bool { - return true; + $blog = $this->route('blog'); + + return $blog instanceof Blog ? (bool) $this->user()?->can('update', $blog) : true; } protected function prepareForValidation(): void diff --git a/app/Policies/BlogPolicy.php b/app/Policies/BlogPolicy.php new file mode 100644 index 00000000..e128ea3d --- /dev/null +++ b/app/Policies/BlogPolicy.php @@ -0,0 +1,25 @@ +id === $blog->user_id || $user->can('edit blogs'); + } + + /** + * Determine whether the user can delete the blog. + */ + public function delete(User $user, Blog $blog): bool + { + return $user->can('delete blogs'); + } +} diff --git a/resources/js/components/BlogRow.vue b/resources/js/components/BlogRow.vue index 97d3e992..9c7cdc05 100644 --- a/resources/js/components/BlogRow.vue +++ b/resources/js/components/BlogRow.vue @@ -1,10 +1,11 @@