在laravel中使用用户授权策略(policy)

39 篇文章 0 订阅

应用场景:

假设本人的用户uid=1吗,现在我想修改个人资料user/1/edit,这时候,当我输入user/2/edit时,也能进入用户为2的个人资料进行修改。在laravel中

public function __construct()
    {
        $this->middleware('auth', ['except' => ['show']]);
    }

在完成对未登录用户的限制之后,接下来我们要限制的是已登录用户的操作。当 id 为 2 的用户去尝试更新 id 为 1 的用户信息时,我们应该返回一个 403 禁止访问的异常。在 Laravel 中可以使用 授权策略 (Policy) 来对用户的操作权限进行验证,在用户未经授权进行操作时将返回 403 禁止访问的异常。

我们可以使用以下命令来生成一个名为 UserPolicy 的授权策略类文件,用于管理用户模型的授权。

实例:$php artisan make:policy UserPolicy创建一个授权策略类文件,生成的文件在app/Policies 

打开UserPolicy.php,加入下面这行代码

 update 方法接收两个参数,第一个参数默认为当前登录用户实例,第二个参数则为要进行授权的用户实例。当两个 id 相同时,则代表  两个用户是相同用户,用户通过授权,可以接着进行下一个操作。如果 id 不相同的话,将抛出 403 异常信息来拒绝访问。
    public function update(User $currentUser, User $user)
    {
        return $currentUser->id === $user->id;
    }

在这里面我们不需要判断currentUser是否为null,null代表用户是没有登录直接,框架会直接返回false


接下来我们需要AuthServiceProvider 这里进行注册,里面存在一个$policies如下:

我们需要用户user指定接收UserPolicy授权类

protected$policies=[

'App\Model'=>'App\Policies\ModelPolicy',

\App\Models\User::class=> \App\Policies\UserPolicy::class,

];

接下来我们在浏览器中可以直接使用authorize 进行检测用户是否授权$this->authorize('update',$user);

注解:这里 update 是指授权类里的 update 授权方法,$user 对应传参 update 授权方法的第二个参数。

正如上面定义 update 授权方法时候提起的,调用时,默认情况下,我们 不需要 传递第一个参数,

也就是当前登录用户至该方法内,因为框架会 自动 加载当前登录用户。

欢迎加入laravel进阶群

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值