用户访问Nova中未经身份验证的区域时如何终止403

时间:2018-12-11 12:54:00

标签: laravel policy provider laravel-nova

在我的laravel / nova应用程序中,我需要设置以下内容: 用户必须看到自己的帖子,而看不到其他帖子。 例如:

| id | name        | user_id |
|----|-------------|---------|
| 1  | POST1       |    1    |
| 2  | POST2       |    1    |
| 3  | POST3       |    2    |

在这种情况下,如果我们是id = 1用户,则只需查看前两个帖子即可。 这很容易,我阅读了文档并以此为准。

在相关模型中,我这样做:

public static function indexQuery(NovaRequest $request, $query)
{
    if(auth()->user()->hasRole('admin'))
    {
        return $query;
    }
    if(!auth()->user()->hasRole('admin'))
    {
        return $query->where('user_id', auth()->user()->id);
    }
}

但是我仍然看到这样: .... / resources / posts / 3

我必须看不到,我需要获取403页。我该把这个声明放在哪里? 我是之前创建的策略。在帖子政策中,

public function view(User $user, Company $company)
{
    return auth()->user()->hasRole(['supervisor', 'admin']);
}

这也不能解决问题。这些是我尝试过的,只是没有显示。但是我需要中止403或smt。

任何人都可以帮助我,我会非常高兴。预先感谢。

1 个答案:

答案 0 :(得分:0)

当前策略条件auth()->user()->hasRole(['supervisor', 'admin']),仅检查经过身份验证的用户是否已指定角色。它不会检查自己的帖子。

如下更新您的发布政策条件。还要注意,第二个参数是Post而不是Company

的实例
public function view(User $user, Post $post)
{
    return $post->user_id == $auth()->user()->id;
}