我刚开始学习Laravel 5并遇到了一个我无法解决的问题: 如何判断某个用户只能看到某些东西。
例如,如果我查看不属于我自己的个人资料,则不应显示“编辑个人资料”按钮。但如果我查看我自己的个人资料,这个按钮应该是可见的。
我已经获得的是授权某些请求。例如,授权用户实际更新配置文件:
public function updateProfile(Profile $profile, UpdateProfile $request){
//update the given profile
}
所以UpdateProfile在这里是一个Request Class,它有一个authorize()和一个rule()方法,在authorize()方法中我检查记录的User是否正在更新他自己的个人资料。
所以我想也许我可以自己使用authorize()方法,但我不确定如何。
现在我当然可以随时查看:
if($user -> userID == Auth::user() -> userID)
但是,如果我需要检查更复杂,例如当我写一篇文章并想要显示该帖子的删除按钮我要检查时: 是用户admin,如果不是该帖子的用户编写者,如果其中任何一个为真,则显示删除按钮。
所以我的问题是,在laravel 5中我会在哪里检查这个?
答案 0 :(得分:1)
您可以在userCanEdit
课程上编写Post
方法。像这样:
function userCanEdit(User $user)
{
return $user->isAdmin() || $this->user_id == $user->id;
}
然后在你的观点上调用它:
@if ($post->userCanEdit(Auth::user()))
<a href="{{ url("edit/{$post->getId()}") }}">Edit</a>
@endif
这样做的好处是可以保持视图清晰,并将业务逻辑集中在一个可重用的方法中。如果可以编辑帖子的用户的定义发生变化,那么这是您唯一需要担心的地方。
答案 1 :(得分:0)
所以我的问题是,在laravel 5中我会在哪里检查这个?
在您的观点中。例如,假设您正在加载这样的博客内容:
// controller
public function showPost(Post $post){
return view('views.post', ['post' => $post]);
}
在视图中,我们希望只有作者对其进行更改。
// post view
<h2>{{ $post->getTitle() }}</h2>
@if ($post->getAuthor()->getId() === Auth::user()->getId())
<a href="{{ url("edit/{$post->getId()}") }}">Edit</a>
@endif
如上所示,如果作者与经过身份验证的用户相同,则她/他可以看到此帖子的编辑链接。