Laravel 学习笔记: 授权策略(Policy)

Policy(即策略)是在特定模型或者资源中组织授权逻辑的类,用来处理用户授权动作。

比如在博客程序中会有一个 Article 模型,这个模型就会有一个相应的 ArticlePolicy 来对用户的操作进行授权,比如在修改一篇文章时,我们会这样写:

$article = Article::find(1)
// 校验这篇是否属于当前用户
if ($article->user_id == Auth::id()) {
    // 修改文章
}
return ture;

Policy 其实就是将校验的逻辑从控制器转移到相对应的模型策略 (ArticlePolicy) 中。

生成 Policy

使用 php artisan make:policy ArticlePolicy 命令生成 Policy,保存在 app/Policies 目录下。

注册 Policy

然后在 app/Providers/AuthServiceProvider.phppolicies 数组中注册该策略,将 Article 模型与对应的 ArticlePolicy 策略进行绑定。

 ArticlePolicy::class,
    ];

    /**
     * 注册任意用户认证、用户授权服务。
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        //
    }
}

编写 Policy 校验逻辑

接下来就在 ArticlePolicy 策略中编写校验用户是否拥有修改文章的权限的方法。

id == $article->user_id;
    }
}

update 方法中判断文章作者id是否等于当前登录的用户id,返回 true 或 false。true 可以进行修改操作,false 则会抛出没有权限。

使用 Policy

然后就是在控制器中的使用了。

authorize('update', $article);
        
        // 更新文章
        $article->fill($request->all());
        $article->save();
    }
}

authorize 的第一个参数表示本次验证使用 ArticlePolicy 里面的 update 方法, $article 实例用来判断使用哪一种策略,当然也可以不用指定具体实例,只需要传递一个类名。

$this->authorize('update', Article::class);

你可能感兴趣的:(laravel,php)