Laravel 5授权用户查看某些按钮

时间:2015-03-11 11:37:56

标签: php laravel-5 authorize

我刚开始学习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中我会在哪里检查这个?

2 个答案:

答案 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

如上所示,如果作者与经过身份验证的用户相同,则她/他可以看到此帖子的编辑链接。