gpt4 book ai didi

php - 拉维尔 5 : check if user belongs to the moderators list before allowing him to edit

转载 作者:行者123 更新时间:2023-11-29 06:21:43 26 4
gpt4 key购买 nike

我正在使用 Gate 授权来检查用户是否有权访问或查看某些内容。

例如,我有一个 update-post 门定义,用于检查用户是否拥有该帖子或拥有该子项,如果是,他将能够看到“编辑”链接并访问编辑路线。否则,他将看不到任何东西。

我现在正在尝试添加另一个权限来检查用户是否属于“版主”表,如果是,他也将能够在 subreddit/show 上看到“编辑”链接

前 2 次检查效果很好,但第三次检查失败,“编辑”链接现在始终可见,即使我无法访问不属于我或不属于我拥有的 subreddit 的帖子的编辑路径.

编辑:我编辑了$moderators_list,它现在检查登录用户是否是他正在查看的帖子的 subreddit 的版主。 dd($moderators_list 给我一个包含正确值的列表。但是我不能使用 $moderators_list->user_id 来给 Undefined property: Illuminate\Database\Eloquent\Collection::$user_id

编辑 2: 我已经修复了获取 subreddit 版主用户的 user_id 的查询。所以现在使用 $moderators_list->user-id 得到 3 的 id,这是当前登录的用户 id。但是门检查仍然失败,无法编辑 subreddit 中的帖子我是主持人在。

我的 table

users: id, name, email...
subreddits: id, user_id...
posts: id, user_id, subreddit_id...
moderators: id, user_id, subreddit_id...

这是$gate定义

$gate->define('update-post', function ($user, $post, $moderators_list) {
// Check if user is subreddit owner
if ($user->id === $post->subreddit->user->id) {
return true;
}

// Check if user is the post author
if ($user->id === $post->user_id) {
return true;
}

// Check if user is a moderator of a subreddit
if ($user->id === $moderators_list->user_id) {
return true;
}

return false;
});

这是 PostsController 上的 show() 方法

请注意 dd($moderators_list) 将输出此帖子所在的 subreddit 的所有版主列表,因此我得到了正确的结果。

public function show(Post $post, Subreddit $subreddit, Moderator $moderator)
{
$post = Post::with('user.votes')->findOrFail($post->id);
$moderator = Moderator::where('user_id', '=', Auth::id())->first();
$moderators_list = Moderator::where('subreddit_id', '=', $post->subreddit->id)->where('user_id', '=', Auth::id())->first();

return view('post/show')->with('post', $post)
->with('moderator', $moderator)
->with('moderators_list', $moderators_list);
}

这就是我检查用户是否有权查看 View 上的“编辑”链接的方式

@can('update-post', [$post, $moderator, $moderators_list])
<a href="{{ action('PostsController@edit', $post->id) }}">Edit</a>
@endcan

最佳答案

您可以直接在数据库中检查用户是否是版主:

$isModerator = $post->subreddit->moderators()->where('user_id', $user->id)->exists();

关于php - 拉维尔 5 : check if user belongs to the moderators list before allowing him to edit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32994444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com