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 @@
-
+