用户授权
用户授权
简介
除了内置的 认证服务 外, Lumen 还提供了一种简单的用户认证逻辑和资源权限控制方案。有很多种方法与辅助函数能帮你处理授权逻辑。
总体来说,Lumen 中的使用用户授权与 Laravel 大同小异。我们将会在这个文档中指出不同的地方,完整用户授权文档还需参考 Laravel 用户授权文档 。
与 Laravel 的不同
定义权限
与 Laravel 相比,Lumen 的不同之处在于如何定义权限。在 Lumen 中,你可以很方便的在你的 AuthServiceProvider
文件中使用 Gate
facade 定义权限:
Gate::define('update-post', function ($user, $post) {
return $user->id === $post->user_id;
});
定义授权策略
与 Laravel 不同, Lumen 的 AuthServiceProvider
没有 $policies
数组。 但是, 你仍然可以在 AuthServiceProvider
的 boot
方法中使用Gate
facade 来调用 policy
方法定义授权策略:
Gate::policy(Post::class, PostPolicy::class);
更多关于授权策略信息,请参考 Laravel 文档 。
检测权限
你可以像在 Laravel 中一样使用 Gate
facade 检测权限,首先需要保证在 bootstrap/app.php
文件开启了 facade 。值得一提的是,我们不需要将 User
实例传递给 allows
方法,认证过的用户会自动传参到用户授权的回调中:
if (Gate::allows('update-pst', $post)) {
//
}
if (Gate::denies('update-post', $post)) {
abort(403);
}
当然,也可以传递 User
实例来检测他的权限:
if ($request->user()->can('update-post', $post)) {
// 用户拥有更新 post 权限
}
if ($request->user()->cannot('update-post', $post)) {
abort(403);
}
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。