diff --git a/app/Http/Controllers/RepliesController.php b/app/Http/Controllers/RepliesController.php index 38e49b29a..bf8acd37d 100644 --- a/app/Http/Controllers/RepliesController.php +++ b/app/Http/Controllers/RepliesController.php @@ -30,6 +30,6 @@ public function destroy(Reply $reply) $this->authorize('destroy', $reply); $reply->delete(); - return redirect()->route('replies.index')->with('success', '评论删除成功!'); + return redirect()->to($reply->topic->link())->with('success', '评论删除成功!'); } } diff --git a/app/Models/Topic.php b/app/Models/Topic.php index 6fc9a7f29..47b8a2188 100644 --- a/app/Models/Topic.php +++ b/app/Models/Topic.php @@ -56,4 +56,10 @@ public function link($params = []) { return route('topics.show', array_merge([$this->id, $this->slug], $params)); } + + public function updateReplyCount() + { + $this->reply_count = $this->replies->count(); + $this->save(); + } } diff --git a/app/Observers/ReplyObserver.php b/app/Observers/ReplyObserver.php index d878912a6..a0652779c 100644 --- a/app/Observers/ReplyObserver.php +++ b/app/Observers/ReplyObserver.php @@ -3,18 +3,17 @@ namespace App\Observers; use App\Models\Reply; -use App\Notifications\TopicReplied; // creating, created, updating, updated, saving, // saved, deleting, deleted, restoring, restored +use App\Notifications\TopicReplied; + class ReplyObserver { public function created(Reply $reply) { - $reply->topic->reply_count = $reply->topic->replies->count(); - $reply->topic->save(); - + $reply->topic->updateReplyCount(); // 通知话题作者有新的评论 $reply->topic->user->notify(new TopicReplied($reply)); } @@ -23,4 +22,9 @@ public function creating(Reply $reply) { $reply->content = clean($reply->content, 'user_topic_body'); } + + public function deleted(Reply $reply) + { + $reply->topic->updateReplyCount(); + } } diff --git a/app/Observers/TopicObserver.php b/app/Observers/TopicObserver.php index 98529fd92..15851ffdc 100644 --- a/app/Observers/TopicObserver.php +++ b/app/Observers/TopicObserver.php @@ -28,4 +28,9 @@ public function saved(Topic $topic) dispatch(new TranslateSlug($topic)); } } + + public function deleted(Topic $topic) + { + \DB::table('replies')->where('topic_id', $topic->id)->delete(); + } } diff --git a/app/Policies/ReplyPolicy.php b/app/Policies/ReplyPolicy.php index a5b6096b0..997736df3 100644 --- a/app/Policies/ReplyPolicy.php +++ b/app/Policies/ReplyPolicy.php @@ -7,14 +7,8 @@ class ReplyPolicy extends Policy { - public function update(User $user, Reply $reply) - { - // return $reply->user_id == $user->id; - return true; - } - public function destroy(User $user, Reply $reply) { - return true; + return $user->isAuthorOf($reply) || $user->isAuthorOf($reply->topic); } } diff --git a/resources/views/topics/_reply_list.blade.php b/resources/views/topics/_reply_list.blade.php index 62b2b49ad..438137e82 100644 --- a/resources/views/topics/_reply_list.blade.php +++ b/resources/views/topics/_reply_list.blade.php @@ -16,11 +16,19 @@
{{-- 回复删除按钮 --}} - + @can('destroy', $reply) + + @endcan