diff --git a/app/Domain/Blog/Actions/StoreBlogAction.php b/app/Domain/Blog/Actions/StoreBlogAction.php index d16a753a..8c07b16d 100644 --- a/app/Domain/Blog/Actions/StoreBlogAction.php +++ b/app/Domain/Blog/Actions/StoreBlogAction.php @@ -17,6 +17,7 @@ public function __invoke(StoreBlogRequest $storeBlogRequest): Blog $blog = Blog::create([ 'author_id' => auth()->user()->id, ...$storeBlogRequest->validated(), + 'published_at' => null ]); $blog->tags()->sync($tags); diff --git a/app/Domain/Blog/Actions/UpdateBlogAction.php b/app/Domain/Blog/Actions/UpdateBlogAction.php index f376be77..92bdf933 100644 --- a/app/Domain/Blog/Actions/UpdateBlogAction.php +++ b/app/Domain/Blog/Actions/UpdateBlogAction.php @@ -18,6 +18,7 @@ public function __invoke(Blog $blog, UpdateBlogRequest $updateBlogRequest): Blog $blog->update([ ...$updateBlogRequest->validated(), + 'published_at' => null ]); $blog->tags()->sync($tags); diff --git a/app/Domain/Blog/Models/Blog.php b/app/Domain/Blog/Models/Blog.php index 787040c0..8951f31c 100644 --- a/app/Domain/Blog/Models/Blog.php +++ b/app/Domain/Blog/Models/Blog.php @@ -21,7 +21,8 @@ class Blog extends Model protected $guarded = []; protected $casts = [ - 'is_draft' => 'bool' + 'is_draft' => 'bool', + 'published_at' => 'timestamp' ]; public function author(): BelongsTo diff --git a/app/Domain/Blog/Policies/BlogPolicy.php b/app/Domain/Blog/Policies/BlogPolicy.php index f056b911..3bb19ff6 100644 --- a/app/Domain/Blog/Policies/BlogPolicy.php +++ b/app/Domain/Blog/Policies/BlogPolicy.php @@ -7,7 +7,7 @@ class BlogPolicy { - public function before(User $user): ?bool + public function before(User $user, string $ability): ?bool { if ($user->hasRole(User::ROLE_ADMIN)) { return true; @@ -30,9 +30,4 @@ public function view(User $user): bool { return $user->hasRole(User::ROLE_AUTHOR); } - - public function viewPublic(User $user, Blog $blog): bool - { - return ! $blog->isDraft(); - } } diff --git a/app/Http/Controllers/Views/Blogs/ShowBlogController.php b/app/Http/Controllers/Views/Blogs/ShowBlogController.php index 358cca32..61ab3a39 100644 --- a/app/Http/Controllers/Views/Blogs/ShowBlogController.php +++ b/app/Http/Controllers/Views/Blogs/ShowBlogController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Views\Blogs; use Illuminate\View\View; +use App\Domain\Iam\Models\User; use App\Domain\Blog\Models\Blog; use App\Http\Controllers\Controller; @@ -10,7 +11,15 @@ class ShowBlogController extends Controller { public function __invoke(Blog $blog): View { - $this->authorize('viewPublic', [Blog::class, $blog]); + if ($blog->isDraft()) { + if (auth()->check()) { + if (! auth()->user()->hasRole([User::ROLE_ADMIN])) { + abort(403, 'Blog is currently in a draft status'); + } + } else { + abort(403, 'Blog is currently in a draft status'); + } + } return view('blogs.show', [ 'blog' => $blog diff --git a/resources/js/Layouts/AuthenticatedLayout.vue b/resources/js/Layouts/AuthenticatedLayout.vue index 56ed515c..4910a250 100644 --- a/resources/js/Layouts/AuthenticatedLayout.vue +++ b/resources/js/Layouts/AuthenticatedLayout.vue @@ -1,11 +1,11 @@ diff --git a/resources/js/Layouts/ProfileLayout.vue b/resources/js/Layouts/ProfileLayout.vue index fc0c5db7..3e86837b 100644 --- a/resources/js/Layouts/ProfileLayout.vue +++ b/resources/js/Layouts/ProfileLayout.vue @@ -1,20 +1,20 @@ diff --git a/resources/views/components/blogs/card.blade.php b/resources/views/components/blogs/card.blade.php index ab81077b..b6158941 100644 --- a/resources/views/components/blogs/card.blade.php +++ b/resources/views/components/blogs/card.blade.php @@ -17,7 +17,7 @@
- {{$blog->published_at}} + {{ Carbon\Carbon::parse($blog->published_at)->diffForHumans() }}
diff --git a/resources/views/livewire/blogs/show-blog.blade.php b/resources/views/livewire/blogs/show-blog.blade.php index 188b80ab..cd922a04 100644 --- a/resources/views/livewire/blogs/show-blog.blade.php +++ b/resources/views/livewire/blogs/show-blog.blade.php @@ -16,7 +16,8 @@
@if($blog->published_at) - Published by {{ $blog->author->name }} {{ $blog->published_at->diffForHumans() }} + Published + by {{ $blog->author->name }} {{ Carbon\Carbon::parse($blog->published_at)->diffForHumans() }} @else This blog is in a draft status @endif