我有具有m2m关系的“文章”和“用户”模型(带有user_id和article_id列的数据透视表)。 在ArticleController中,我需要检查的是用户是该文章的作者之一,以具有对文章执行更新/删除操作的访问权限。 我可以从auth-> user()-> id中获取当前登录的用户ID。
答案 0 :(得分:0)
在这种情况下,您需要使用Laravel策略
我建议您看一下这份文档
Authorization
答案 1 :(得分:0)
如果您根据https://laravel.com/docs/5.6/eloquent-relationships#many-to-many使用标准口才关系
只需简单地先获取文章,然后检查它是否与经过身份验证的用户有关。
$article = Article::find($id);
if ($article->users()->where('id', Auth::user()->id)->get()->count() ) {
//your code
}
答案 2 :(得分:0)
我在策略中使用了这种算法。谢谢。
public function update(User $user, Article $article){
//All articles id where user is author.
$userArticles = UserArticle::where('user_id', $user->id)->get();
$confirmFlag = false; //check flag.
//We compare article ids that belong to user with article id that we want to edit.
foreach ($userArticles as $userArticle) {
if ($userArticle->article_id != $article->id) {
$confirmFlag = false;
} else {
$confirmFlag = true;
break; // if we found that article that we want to edit
// is belong to user then we break our foreach with $confirmFlag=true.
}
}
return $confirmFlag == true ? true : false;
}
答案 3 :(得分:0)
根据您自己的回答,我想给您一个更好的方法...
public function update(User $user, Article $article){
//All articles id where user is author.
$userArticles = UserArticle::where('user_id', $user->id)->where('article_id', $article->id)->first();
return $userArticles === null ? false : true;
}