• lavarel 中间件


    创建中间件

    php artisan make:policy UserPolicy

    所有生成的授权策略文件都会被放置在 app/Policies 文件夹下。

    让我们为默认生成的用户授权策略添加 update 方法,用于用户更新时的权限验证

    app/Policies/UserPolicy.php

    <?php
    
    namespace AppPolicies;
    
    use AppModelsUser;
    use IlluminateAuthAccessHandlesAuthorization;
    
    class UserPolicy
    {
        use HandlesAuthorization;
    
        public function update(User $currentUser, User $user)
        {
            return $currentUser->id === $user->id;
        }
    }
    View Code

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


     对中间件进行注册

    app/Providers/AuthServiceProvider.php

        protected $policies = [
            'AppModel' => 'AppPoliciesModelPolicy',
            AppModelsUser::class  => AppPoliciesUserPolicy::class,
        ];

    授权策略定义完成之后,我们便可以在控制器中使用 authorize 方法来检验用户是否授权

    $this->authorize('update', $user);

    我们需要为 edit 和 update 方法加上这行:

        public function edit(User $user)
        {
            $this->authorize('update', $user);
            return view('users.edit', compact('user'));
        }
    
        public function update(UserRequest $request, ImageUploadHandler $uploader, User $user)
        {
            $this->authorize('update', $user);
            $data = $request->all();
    
            if ($request->avatar) {
                $result = $uploader->save($request->avatar, 'avatars', $user->id, 362);
                if ($result) {
                    $data['avatar'] = $result['path'];
                }
            }
    
            $user->update($data);
            return redirect()->route('users.show', $user->id)->with('success', '个人资料更新成功!');
        }

    然后2号用户 访问 1 号用户的修改资料页面 的时候,用户不是一个人,系统将会拒绝访问:

  • 相关阅读:
    POJ 3468 A Simple Problem with Integers(线段树区间求和)
    windows+Ubuntu双系统 windows引导修复
    CSDN博文大赛火爆开启
    TNS-12541,TNS-12560,TNS-00511,TNS-12542,TNS-12560,TNS-00512数据库启动监听报错
    MResource
    【LeetCode】【Python】Linked List Cycle
    中间件解析FDMEMTABLE.delta生成SQL的方法
    TDSTCPServerTransport 的Filters
    DATASNAP压缩过滤器的使用
    咏南CS插件开发框架也可BS方式部署
  • 原文地址:https://www.cnblogs.com/zhaoyang-1989/p/10101225.html
Copyright © 2020-2023  润新知