php 我如何修复Laravel评论政策不工作?

twh00eeo  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(157)

我使用惯性JS。我创建了一个论坛,你可以管理你的帖子和评论(CRUD)。
通常情况下,可以修改或删除其帖子或评论的人是创建者和管理员。
我能够为帖子设置一个策略,但对于评论它不工作。我需要你的帮助来解决这个问题。
这是我的显示功能的职位和评论

public function show(Post $post, Comment $comment)
    {
        usleep(500000);

        $post->incrementReadCount();

        $updateableCommentIds = $post->comments
            ->map(function ($comment) {
                if (Auth::user()->can('update', $comment)) {
                    return $comment->id;
                }
            })
            ->filter();

        return Inertia::render('Frontend/Forum/Helpers/PostDetails', [
            'post' => PostResource::make(
                $post->load('user')->loadCount('comments')
            ),
            'comments' => CommentResource::collection(
                Comment::where('post_id', $post->id)
                    ->with('user')
                    ->paginate(10)
                    ->withQueryString()
            ),
            'categories' => Category::all(),
            'can' => [
                'edit' => Auth::check() && Auth::user()->can('edit', $post),
                'commentEdit' => $updateableCommentIds
            ]
        ]);
    }

这是我的评论政策

class CommentPolicy
{
    use HandlesAuthorization;

    public function update(User $user, Comment $comment): bool
    {
        return $user->is_admin || $user->id === (int) $comment->user_id;
    }
}

这是我的视频文件

<div
v-if="can.commentEdit.includes(comment.id)"
>
        //show me this if im the auther of this comment
</div>

我试过了也不行

public function show(Post $post)
{
    $canUpdateComments = $post->comments->every(function ($comment) {
        return Auth::user()->can('update', $comment);
    });

    // Return the view with the ability to update the comments
    return view('posts.show', compact('post', 'canUpdateComments'));
}
yjghlzjz

yjghlzjz1#

我只是注意到我有一个评论资源,只是有了它,我找到了解决方案,而不是每次检查帖子,而不是直接在评论上...

class CommentResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            ...
            'can' => [
                'edit' => Auth::user()->can('update', $this->resource)
            ]
        ];
    }
}

相关问题