From c5ffe9b870088cfc41f86f5a5fb920a99260d09e Mon Sep 17 00:00:00 2001 From: Joel Butcher Date: Thu, 30 Dec 2021 17:56:58 +0000 Subject: [PATCH 01/11] bump minimum PHP version to 8.1 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index f37e7aa4d..60afaeccd 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "license": "MIT", "type": "project", "require": { - "php": "^8.0", + "php": "^8.1", "algolia/scout-extended": "^1.10", "blade-ui-kit/blade-heroicons": "^1.0", "blade-ui-kit/blade-icons": "^1.0", From cab5b9623e4c0ba1f382591f92ae66f01ee66257 Mon Sep 17 00:00:00 2001 From: Joel Butcher Date: Thu, 30 Dec 2021 17:58:09 +0000 Subject: [PATCH 02/11] Added article policy action enum and use in policy --- app/Enums/ArticlePolicyAction.php | 13 +++++++++++++ app/Http/Controllers/Admin/ArticlesController.php | 8 ++++---- .../Controllers/Articles/ArticlesController.php | 6 +++--- app/Policies/ArticlePolicy.php | 13 +++++++------ resources/views/articles/show.blade.php | 10 +++++----- .../views/components/articles/actions.blade.php | 10 +++++----- 6 files changed, 37 insertions(+), 23 deletions(-) create mode 100644 app/Enums/ArticlePolicyAction.php diff --git a/app/Enums/ArticlePolicyAction.php b/app/Enums/ArticlePolicyAction.php new file mode 100644 index 000000000..ea785fc22 --- /dev/null +++ b/app/Enums/ArticlePolicyAction.php @@ -0,0 +1,13 @@ +authorize(ArticlePolicy::APPROVE, $article); + $this->authorize(ArticlePolicy::APPROVE->value, $article); $this->dispatchNow(new ApproveArticle($article)); @@ -45,7 +45,7 @@ public function approve(Article $article) public function disapprove(Article $article) { - $this->authorize(ArticlePolicy::DISAPPROVE, $article); + $this->authorize(ArticlePolicy::DISAPPROVE->value, $article); $this->dispatchNow(new DisapproveArticle($article)); @@ -56,7 +56,7 @@ public function disapprove(Article $article) public function decline(Article $article) { - $this->authorize(ArticlePolicy::DECLINE, $article); + $this->authorize(ArticlePolicy::DECLINE->value, $article); $this->dispatchNow(new DeclineArticle($article)); @@ -67,7 +67,7 @@ public function decline(Article $article) public function togglePinnedStatus(Article $article) { - $this->authorize(ArticlePolicy::PINNED, $article); + $this->authorize(ArticlePolicy::PINNED->value, $article); $article->is_pinned = ! $article->isPinned(); $article->save(); diff --git a/app/Http/Controllers/Articles/ArticlesController.php b/app/Http/Controllers/Articles/ArticlesController.php index 89db0caa8..537a7fe50 100644 --- a/app/Http/Controllers/Articles/ArticlesController.php +++ b/app/Http/Controllers/Articles/ArticlesController.php @@ -110,7 +110,7 @@ public function store(ArticleRequest $request) public function edit(Article $article) { - $this->authorize(ArticlePolicy::UPDATE, $article); + $this->authorize(ArticlePolicy::UPDATE->value, $article); return view('articles.edit', [ 'article' => $article, @@ -121,7 +121,7 @@ public function edit(Article $article) public function update(ArticleRequest $request, Article $article) { - $this->authorize(ArticlePolicy::UPDATE, $article); + $this->authorize(ArticlePolicy::UPDATE->value, $article); $wasNotPreviouslySubmitted = $article->isNotSubmitted(); @@ -138,7 +138,7 @@ public function update(ArticleRequest $request, Article $article) public function delete(Article $article) { - $this->authorize(ArticlePolicy::DELETE, $article); + $this->authorize(ArticlePolicy::DELETE->value, $article); $this->dispatchNow(new DeleteArticle($article)); diff --git a/app/Policies/ArticlePolicy.php b/app/Policies/ArticlePolicy.php index fe425bb87..4b4d753a8 100644 --- a/app/Policies/ArticlePolicy.php +++ b/app/Policies/ArticlePolicy.php @@ -2,17 +2,18 @@ namespace App\Policies; +use App\Enums\ArticlePolicyAction; use App\Models\Article; use App\Models\User; final class ArticlePolicy { - const UPDATE = 'update'; - const DELETE = 'delete'; - const APPROVE = 'approve'; - const DISAPPROVE = 'disapprove'; - const DECLINE = 'decline'; - const PINNED = 'togglePinnedStatus'; + const UPDATE = ArticlePolicyAction::UPDATE; + const DELETE = ArticlePolicyAction::DELETE; + const APPROVE = ArticlePolicyAction::APPROVE; + const DISAPPROVE = ArticlePolicyAction::DISAPPROVE; + const DECLINE = ArticlePolicyAction::DECLINE; + const PINNED = ArticlePolicyAction::PINNED; public function update(User $user, Article $article): bool { diff --git a/resources/views/articles/show.blade.php b/resources/views/articles/show.blade.php index 0eca952eb..5cd4b4fcf 100644 --- a/resources/views/articles/show.blade.php +++ b/resources/views/articles/show.blade.php @@ -158,7 +158,7 @@ class="prose prose-lg text-gray-800 prose-lio" - @can(App\Policies\ArticlePolicy::APPROVE, $article) + @can(App\Policies\ArticlePolicy::APPROVE->value, $article) @if ($article->isAwaitingApproval()) value, $article) @if ($article->isPublished()) value, $article) @if ($article->isNotDeclined()) value, $article) @endcan - @can(App\Policies\ArticlePolicy::PINNED, $article) + @can(App\Policies\ArticlePolicy::PINNED->value, $article) isNotPublished() && $article->isAwaitingApproval()) - @can(App\Policies\ArticlePolicy::APPROVE, $article) + @can(App\Policies\ArticlePolicy::APPROVE->value, $article) @endcan - @can(App\Policies\ArticlePolicy::DECLINE, $article) + @can(App\Policies\ArticlePolicy::DECLINE->value, $article) @endcan @else - @can(App\Policies\ArticlePolicy::DISAPPROVE, $article) + @can(App\Policies\ArticlePolicy::DISAPPROVE->value, $article) value, $article) - @can(App\Policies\ArticlePolicy::DELETE, $article) + @can(App\Policies\ArticlePolicy::DELETE->value, $article) Date: Thu, 30 Dec 2021 18:10:25 +0000 Subject: [PATCH 03/11] Added reply policy action enum and use in policy --- app/Enums/ReplyPolicyAction.php | 10 ++++++++++ app/Http/Controllers/ReplyController.php | 8 ++++---- app/Policies/ReplyPolicy.php | 7 ++++--- .../views/components/threads/reply-menu.blade.php | 2 +- resources/views/forum/threads/show.blade.php | 2 +- 5 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 app/Enums/ReplyPolicyAction.php diff --git a/app/Enums/ReplyPolicyAction.php b/app/Enums/ReplyPolicyAction.php new file mode 100644 index 000000000..c92f44d20 --- /dev/null +++ b/app/Enums/ReplyPolicyAction.php @@ -0,0 +1,10 @@ +authorize(ReplyPolicy::CREATE, Reply::class); + $this->authorize(ReplyPolicy::CREATE->value, Reply::class); $reply = $this->dispatchNow(CreateReply::fromRequest($request)); @@ -35,14 +35,14 @@ public function store(CreateReplyRequest $request) public function edit(Reply $reply) { - $this->authorize(ReplyPolicy::UPDATE, $reply); + $this->authorize(ReplyPolicy::UPDATE->value, $reply); return view('replies.edit', compact('reply')); } public function update(UpdateReplyRequest $request, Reply $reply) { - $this->authorize(ReplyPolicy::UPDATE, $reply); + $this->authorize(ReplyPolicy::UPDATE->value, $reply); $this->dispatchNow(new UpdateReply($reply, $request->user(), $request->body())); @@ -53,7 +53,7 @@ public function update(UpdateReplyRequest $request, Reply $reply) public function delete(Reply $reply) { - $this->authorize(ReplyPolicy::DELETE, $reply); + $this->authorize(ReplyPolicy::DELETE->value, $reply); $this->dispatchNow(new DeleteReply($reply)); diff --git a/app/Policies/ReplyPolicy.php b/app/Policies/ReplyPolicy.php index be06ab661..b4bc863e6 100644 --- a/app/Policies/ReplyPolicy.php +++ b/app/Policies/ReplyPolicy.php @@ -2,14 +2,15 @@ namespace App\Policies; +use App\Enums\ReplyPolicyAction; use App\Models\Reply; use App\Models\User; final class ReplyPolicy { - const CREATE = 'create'; - const UPDATE = 'update'; - const DELETE = 'delete'; + const CREATE = ReplyPolicyAction::CREATE; + const UPDATE = ReplyPolicyAction::UPDATE; + const DELETE = ReplyPolicyAction::DELETE; /** * Determine if replies can be created by the user. diff --git a/resources/views/components/threads/reply-menu.blade.php b/resources/views/components/threads/reply-menu.blade.php index 1449ba899..10fcea15e 100644 --- a/resources/views/components/threads/reply-menu.blade.php +++ b/resources/views/components/threads/reply-menu.blade.php @@ -52,7 +52,7 @@ class="flex items-center gap-x-2 font-medium text-gray-300 hover:text-lio-500" @endif @endcan - @can(App\Policies\ReplyPolicy::UPDATE, $reply) + @can(App\Policies\ReplyPolicy::UPDATE->value, $reply)
- @can(App\Policies\ReplyPolicy::CREATE, App\Models\Reply::class) + @can(App\Policies\ReplyPolicy::CREATE->value, App\Models\Reply::class) @if ($thread->isConversationOld())

The last reply to this thread was more than six months ago. Please consider opening a new thread if you have a similar question.

From 31e98e159c961caf6b40024d3ba404019f920996 Mon Sep 17 00:00:00 2001 From: Joel Butcher Date: Thu, 30 Dec 2021 18:13:12 +0000 Subject: [PATCH 04/11] Added thread policy action enum and use in policy --- app/Enums/ThreadPolicyAction.php | 11 +++++++++ .../Controllers/Forum/ThreadsController.php | 14 +++++------ app/Policies/ThreadPolicy.php | 9 +++---- .../components/threads/reply-menu.blade.php | 2 +- .../components/threads/subscribe.blade.php | 4 ++-- .../components/threads/thread-menu.blade.php | 24 +++++++++---------- resources/views/forum/threads/show.blade.php | 2 +- 7 files changed, 39 insertions(+), 27 deletions(-) create mode 100644 app/Enums/ThreadPolicyAction.php diff --git a/app/Enums/ThreadPolicyAction.php b/app/Enums/ThreadPolicyAction.php new file mode 100644 index 000000000..15f77229e --- /dev/null +++ b/app/Enums/ThreadPolicyAction.php @@ -0,0 +1,11 @@ +authorize(ThreadPolicy::UPDATE, $thread); + $this->authorize(ThreadPolicy::UPDATE->value, $thread); $selectedTags = $thread->tags()->pluck('id')->toArray(); return view('forum.threads.edit', ['thread' => $thread, 'tags' => Tag::all(), 'selectedTags' => $selectedTags]); @@ -101,7 +101,7 @@ public function edit(Thread $thread) public function update(ThreadRequest $request, Thread $thread) { - $this->authorize(ThreadPolicy::UPDATE, $thread); + $this->authorize(ThreadPolicy::UPDATE->value, $thread); $thread = $this->dispatchNow(UpdateThread::fromRequest($thread, $request)); @@ -112,7 +112,7 @@ public function update(ThreadRequest $request, Thread $thread) public function delete(Thread $thread) { - $this->authorize(ThreadPolicy::DELETE, $thread); + $this->authorize(ThreadPolicy::DELETE->value, $thread); $this->dispatchNow(new DeleteThread($thread)); @@ -123,7 +123,7 @@ public function delete(Thread $thread) public function markSolution(Thread $thread, Reply $reply) { - $this->authorize(ThreadPolicy::UPDATE, $thread); + $this->authorize(ThreadPolicy::UPDATE->value, $thread); $this->dispatchNow(new MarkThreadSolution($thread, $reply, Auth::user())); @@ -132,7 +132,7 @@ public function markSolution(Thread $thread, Reply $reply) public function unmarkSolution(Thread $thread) { - $this->authorize(ThreadPolicy::UPDATE, $thread); + $this->authorize(ThreadPolicy::UPDATE->value, $thread); $this->dispatchNow(new UnmarkThreadSolution($thread)); @@ -141,7 +141,7 @@ public function unmarkSolution(Thread $thread) public function subscribe(Request $request, Thread $thread) { - $this->authorize(ThreadPolicy::SUBSCRIBE, $thread); + $this->authorize(ThreadPolicy::SUBSCRIBE->value, $thread); $this->dispatchNow(new SubscribeToSubscriptionAble($request->user(), $thread)); @@ -152,7 +152,7 @@ public function subscribe(Request $request, Thread $thread) public function unsubscribe(Request $request, Thread $thread) { - $this->authorize(ThreadPolicy::UNSUBSCRIBE, $thread); + $this->authorize(ThreadPolicy::UNSUBSCRIBE->value, $thread); $this->dispatchNow(new UnsubscribeFromSubscriptionAble($request->user(), $thread)); diff --git a/app/Policies/ThreadPolicy.php b/app/Policies/ThreadPolicy.php index 585d2d073..f0ee8b0a0 100644 --- a/app/Policies/ThreadPolicy.php +++ b/app/Policies/ThreadPolicy.php @@ -2,15 +2,16 @@ namespace App\Policies; +use App\Enums\ThreadPolicyAction; use App\Models\Thread; use App\Models\User; final class ThreadPolicy { - const UPDATE = 'update'; - const DELETE = 'delete'; - const SUBSCRIBE = 'subscribe'; - const UNSUBSCRIBE = 'unsubscribe'; + const UPDATE = ThreadPolicyAction::UPDATE; + const DELETE = ThreadPolicyAction::DELETE; + const SUBSCRIBE = ThreadPolicyAction::SUBSCRIBE; + const UNSUBSCRIBE = ThreadPolicyAction::UNSUBSCRIBE; public function update(User $user, Thread $thread): bool { diff --git a/resources/views/components/threads/reply-menu.blade.php b/resources/views/components/threads/reply-menu.blade.php index 10fcea15e..6e64b90bf 100644 --- a/resources/views/components/threads/reply-menu.blade.php +++ b/resources/views/components/threads/reply-menu.blade.php @@ -7,7 +7,7 @@ @endif - @can(App\Policies\ThreadPolicy::UPDATE, $thread) + @can(App\Policies\ThreadPolicy::UPDATE->value, $thread) @if ($thread->isSolutionReply($reply)) -
+ > - @can(App\Policies\ThreadPolicy::UPDATE, $thread) + @can(App\Policies\ThreadPolicy::UPDATE->value, $thread) Edit @endcan - @can(App\Policies\ThreadPolicy::DELETE, $thread) + @can(App\Policies\ThreadPolicy::DELETE->value, $thread)