laravel 07

中间件初识

  1. auth 登录验证中间件
  1. // 以下方法未登录也可以访问
  2. $this->middleware('auth', [
  3. 'except' => ['index', 'show', 'create', 'store']
  4. ]);
  1. guest 游客中间件
// 只有游客可以访问注册相关方法
$this->middleware('guest', [
    'only' => ['create', 'store']
]);

模型策略验证用户访问动作

本质是:验证用户可以执行那些方法。

比如: 你只能修改你个人的用户资料,不能改别人的资料。

  1. 执行 php artisan make:policy --model=User UserPolicy 生成策略文件 app/Policies/UserPolicy.php
  2. 修改 app/Policies/UserPolicy.php 对应的方法
// eg: $user: 当前登录的user信息; $model: 修改提交的数据
public function update(User $user, User $model)
{
    return $user->id == $model->id;
}
  1. 控制器中执行验证
// eg: UserController中 模型是User, 所以执行 app/Policies/UserPolicy.php 中的 update 方法, 
// 参数 $user 即为 update 方法中的 $model
public function edit(User $user)
{
    $this->authorize('update', $user);
    return view('user.edit', compact('user'));
}
  1. 5.8 之前版本 在 app/Providers/AuthServiceProvider.php 模型和策略之间的关系需要显示的进行绑定
// 5.8 之前版本
protected $policies = [
    // 'App\Model' => 'App\Policies\ModelPolicy',
    'App\User' => UserPolicy::class,
];