我正在使用 laravel 基本策略系统来保护未经授权的用户免受更新帖子的影响。例如,用户的 ID 为 1 并且在帖子表 用户 ID 也是 1。
现在在 $this->authorize('update',$post);
我只能传递一个变量 $post
进行身份验证。而在 can
方法我也可以用$user
变量 $user->can('update',$post)
为授权。
这是代码:
在 PostPolicy.php 中:
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
在 AuthServiceProvider.php 中:
protected $policies = [
Post::class => PostPolicy::class
]
在 Controller 授权方式中:
public function update(Request $request, $id)
{
$post=Post::find(1);
$user=User::find(1);
$this->authorize('update',$post);
return 'Hello Everything Access For You ';
}
在 Controller 中使用 can 方法:
public function update(Request $request, $id)
{
$post=Post::find(1);
$user=User::find(1);
if($user->can('update',$post)){
return 'Your are allowed';
}
else
{
return 'Your are Not allowed';
}
}
我是否适合这两个功能。有什么区别吗。我必须使用哪种方法。提前致谢。
最佳答案
如果您正在使用 authorize()
中的任何一个或 can()
,目的是验证用户是否有权执行某些任务。
但 :
authorize()
,如果它失败(从策略方法返回 false),授权方法将抛出一个 Illuminate\Auth\Access\AuthorizationException,默认的 Laravel 异常处理程序将转换为 HTTP 响应 403 can()
,它就像一个基本的方法来检查用户是否被授权,然后你需要自己处理剩下的事情。如果未经授权该怎么办。 考虑到以上因素,我会说
$this->authorize('update',$post);
更容易在 Controller 中使用。在 documentation 中查看更多相同内容
你也可以这样做:
$request->user()->can()
如果要检查当前请求用户的授权。更新 :
authorize()
旨在授权当前登录的用户,其中 laravel 自动将当前用户传递给策略。而您可以使用
can
在任何用户实例上。$request->user()->can()
如果要检查当前请求用户的授权。 $user = $user::find($id); $user->can(...)
如果是其他用户 关于php - Laravel 中的 Policy Authorize 与 Can Function 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54795611/