用户授权
优质
小牛编辑
137浏览
2023-12-01
介绍
除了内置的 用户认证 服务之外, 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-post', $post)) {
//
}
if (Gate::denies('update-post', $post)) {
abort(403);
}
当然你也可以传递 User
实例来检查他的权限:
if ($request->user()->can('update-post', $post)) {
// 用户拥有更新内容的权限...
}
if ($request->user()->cannot('update-post', $post)) {
abort(403);
}