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

标签 php laravel laravel-5 laravel-4 laravel-5.2

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

    相关文章:

    php - 原则 - 在两个日期之间获得销售

    php - 如何检查一个数组是否在另一个数组PHP中依次具有值?

    php - Laravel 未在 localhost :8000 上显示图像

    php - 如何在 Laravel 的应用程序/控制台/内核中注入(inject)类?

    php - 使用 Laravel Migration 添加额外的表

    php - 压缩字符串,然后解压缩字符串?

    php - 通过 Dropbox 更新图库网页?

    javascript - 如何将 2 个图像并排放置,并将这些图像用作具有 2 个不同费用金额的 Stripe 付款按钮?

    php - Laravel:如何使用 where 语句中的值填充 blade SELECT

    php - 如何在 Laravel 注册过程中填充 2 个表?