lavarel 中间件

Posted zhaoyang-1989

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 号用户的修改资料页面 的时候,用户不是一个人,系统将会拒绝访问:

 

以上是关于lavarel 中间件的主要内容,如果未能解决你的问题,请参考以下文章

lavarel从零开始-第一弹

composer lavarel 安装

Lavarel子查询

lavarel从零开始-第二弹(vue环境)

lavarel echarts异步获取动态数据

lavarel 响应宏