使用 Casbin 作为 ThinkPHP 的权限控制中间件
|
PHP-Casbin是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。 Think-Casbin是一个专为 ThinkPHP5.1 定制的 Casbin 的扩展包,使开发者更便捷的在 thinkphp 项目中使用 Casbin。 安装
composer create-project topthink/think=5.1.* tp5
composer require casbin/think-adapter
php think casbin:publish 这将自动创建 model 配置文件
由于 Think-Casbin 默认将 Casbin 的策略(Policy)存储在数据库中,所以需要初始化数据库表信息。 执行前,请确保数据库连接信息配置正确,如需单独修改 php think casbin:migrate 这将会自动创建 Casbin 的策略(Policy)表 中间件ThinkPHP 从 可以通过命令行指令快速生成中间件 php think make:middleware Authorization 这个指令会 在中间件中,获取当前用户名、URI、请求方法,通过 1 <?php
2
3 namespace apphttpmiddleware;
4
5 use Casbin;
6 use thinkfacadeSession;
7
8 class Authorization
9 {
10 public function handle($request,Closure $next)
11 {
12 // 当前登录用户名,这里以session为例
13 // $user = Session::get('user_name') ?: 'test_user';
14 $user = Session::get('user_name');
15
16 $url = $request->url();
17 $action = $request->method();
18
19 if (!$user){
20 return response()->data('Unauthenticated.')->code(401);
21 }
22
23 if (!Casbin::enforce($user,$url,$action)) {
24 return response()->data('Unauthorized.')->code(403);
25 }
26
27 return $next($request);
28 }
29 }
Casbin Model 配置
1 [request_definition] 2 r = sub,obj, act 3 4 [policy_definition] 5 p = sub, act 6 7 [policy_effect] 8 e = some(where (p.eft == allow)) 9 10 [matchers] 11 m = r.sub == p.sub && keyMatch2(r.obj,p.obj) && r.act == p.act 验证在执行授权之前,先在数据库 添加路由及其中间件: 1 Route::group('users',function () {
2
3 Route::get('',function () {
4 return 'Users data.';
5 });
6
7 Route::get('/:id',function ($id) {
8 return 'User: '.$id;
9 });
10
11 })->middleware(apphttpmiddlewareAuthorization::class);
先登录用户保存用户名到 更多 API 参考
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
