当用户访问 Nova 中未经过身份验证的区域时如何中止 403
How to abort 403 when user visits not authenticated area in 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。
任何人都可以帮助我我会很高兴。提前致谢。
当前策略条件auth()->user()->hasRole(['supervisor', 'admin'])
,仅检查经过身份验证的用户是否已指定角色。它不检查自己的 post.
更新您的 post 政策条件如下。另请注意,第二个参数是 Post
而非 Company
的实例
public function view(User $user, Post $post)
{
return $post->user_id == $auth()->user()->id;
}
在我的 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。
任何人都可以帮助我我会很高兴。提前致谢。
当前策略条件auth()->user()->hasRole(['supervisor', 'admin'])
,仅检查经过身份验证的用户是否已指定角色。它不检查自己的 post.
更新您的 post 政策条件如下。另请注意,第二个参数是 Post
而非 Company
public function view(User $user, Post $post)
{
return $post->user_id == $auth()->user()->id;
}