gpt4 book ai didi

php - Laravel 中的 Policy Authorize 与 Can Function 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 01:47:21 26 4
gpt4 key购买 nike

我正在使用 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com