首页 > 作文

使用 Casbin 作为 ThinkPHP 的权限控制中间件

更新时间:2023-04-07 21:49:26 阅读: 评论:0

php-casbin是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。

think-casbin是一个专为 thinkphp5.1 定制的 casbin 的扩展包,使开发者更便捷的在 thinkphp 项目中使用 casbin。

安装

创建 thinkphp 项目(如果没有):
compor create-project topthink/think=5.1.* tp5

thinkphp项目里,安装think-casbin扩展:
compor require casbin/think-adapter

发布资源:
php think casbin:publish

这将自动创建 model 配置文件config/casbin-basic-model.conf,和 casbin 的配置文件config/casbin.社会工作有哪些php

数据迁移:

由于 think-casbin 默认将 casbin 的策略(policy)存储在数据库中,所以需要初始化好听霸气的游戏名字数据库表信息。

执行前,请确保数据库连接信息配置正确,如需单独修改casbin的数据库连接信息或表名,可以修改config我一见老母亲跪金殿/casbin.php里的配置。

php think casbin:migrate

这将会自动创建 casbin 的策略(policy)表casbin_rule

中间件

thinkphp 从5.1.6+版本开始,正式引入中间件的支持。

可以通过命令行指令快速生成中间件

php think make:middleware authorization

这个指令会application/http/middleware目录下面生成一个authorization中间件。

在中间件中,获取当前用户名、uri、请求方法,通过casbin验证权限:

 1 <?php 2  3 namespace app\http\middleware; 4  5 u casbin; 6 u think\facade\ssion; 7  8 class authorization 9 {10     public function handle($request, \closure $next)11     {12         // 当前登录用户名,这里以ssion为例13         // $ur = ssio非主流符号n::get('ur_name') ?: 'test_ur';14         $ur = ssion::get('ur_name');15 16         $url = $request->url();17         $action = $request->method();18 19         if (!$ur){20             return respon()->data('unauthenticated.')->code(401);21         }22 23    机票查验     if (!casbin::enforce($ur, $url, $action)) {24             return respon()->data('unauthorized.')->code(403);25         }26 27         return $next($request);28     }29 }

casbin model 配置

config\casbin-basic-model.conf配置文件:

 1 [request_definition] 2 r = sub, obj, act 3  4 [policy_definition] 5 p = sub, obj, 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

验证

在执行授权之前,先在数据库casbin_rule表中添加一些默认的策略:

idptypev0v1v21ptest_ur/ursget2ptest_ur/urs/:idget

添加路由及其中间件:

 1 route::group('urs', function () { 2  3     route::get('', function () { 4         return 'urs data.'; 5     }); 6  7     route::get('/:id', function ($id) { 8         return 'ur: '.$id; 9     });10 11 })->middleware(\app\http\middleware\authorization::class);

先登录用户保存用户名到ssion,可以访问/urs/urs/1验证一下权限。

更多 api 参考

management apirbac api

本文发布于:2023-04-07 21:49:25,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/0cef7cfdd7329ab57808d4d3e6018908.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:使用 Casbin 作为 ThinkPHP 的权限控制中间件.doc

本文 PDF 下载地址:使用 Casbin 作为 ThinkPHP 的权限控制中间件.pdf

相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图