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

Laravel 5 Authorize User to see certain Buttons

我刚开始学习 Laravel 5 遇到了一个我无法解决的问题: 如何判断某个用户只能看到某些东西

例如,如果我查看的个人资料不是我自己的,则 "Edit Profile" 按钮不应该可见。但是如果我查看我自己的个人资料,这个按钮应该是可见的。

我已经得到的是授权某些请求。例如授权用户实际更新配置文件:

public function updateProfile(Profile $profile, UpdateProfile $request){
      //update the given profile
}

所以 UpdateProfile 在这里是一个请求 Class,它有一个 authorize() 和一个 rule() 方法,在 authorize() 方法中我检查登录的用户是否正在更新他自己的个人资料。

所以我想也许我可以单独使用 authorize() 方法,但我不太确定如何使用。

现在我当然可以随时检查某事:

if($user -> userID == Auth::user() -> userID)

但是如果我需要检查更复杂的东西怎么办,例如当我写一个 post 并想显示 post 的删除按钮时我想检查: 是用户 admin,如果不是 post 的用户 writer,如果其中任何一个为真,则显示删除按钮。

所以我的问题是,在 laravel 5 中我会在哪里检查这样的东西?

So my question would be, where would i check sth like this in 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

正如您在上面看到的,如果作者与经过身份验证的用户是同一用户,则 she/he 可以看到对此 post 的编辑 link。

您可以在 Post class 上编写 userCanEdit 方法。像这样:

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

这样做的好处是您可以保持视图整洁并将业务逻辑集中在一个可重用的方法中。如果可以编辑 post 的用户的定义发生变化,那是您唯一需要担心的地方。