当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-29 18:45:20 PHP

PHP-Casbin是一个强大高效的开源访问控制框架,支持基于各种访问控制模型的权限管理。Think-Casbin是为ThinkPHP5.1定制的Casbin扩展包,方便开发者在thinkphp项目中使用Casbin。安装并创建一个thinkphp项目(如果没有):composercreate-projecttopthink/think=5.1.*tp5在ThinkPHP项目中,安装Think-Casbin扩展:composerrequirecasbin/think-adapter发布资源:phpthinkcasbin:publish这将自动创建模型配置文件config/casbin-basic-model.conf,以及Casbin配置文件config/casbin.php。数据迁移:由于Think-Casbin默认将Casbin的策略(Policy)存储在数据库中,因此需要初始化数据库表信息。执行前请确保数据库连接信息配置正确。如果需要单独修改Casbin的数据库连接信息或者表名,可以修改config/casbin.php中的配置。phpthinkcasbin:migrate这样会自动创建Casbin的策略(Policy)表casbin_rule。中间件ThinkPHP从5.1.6+版本开始正式引入中间件支持。通过命令行命令可以快速生成中间件phpthinkmake:middlewareAuthorization该命令会在application/http/middleware目录下生成一个Authorization中间件。中间件中获取当前用户名、URI、请求方式,通过Casbin验证权限:,\Closure$next){//当前登录用户名,这里以session为例//$user=Session::get('user_name')?:'test_user';$user=Session::get('user_name');$url=$request->url();$action=$request->method();if(!$user){returnresponse()->data('Unauthenticated.')->code(401);}if(!Casbin::enforce($user,$url,$action)){returnresponse()->data('Unauthorized.')->code(403);}返回$next($request);}}Casbin模型配置config\casbin-basic-model.conf配置文件:[request_definition]r=sub,obj,act[policy_definition]p=sub,obj,act[policy_effect]e=some(where(p.eft==allow))[matchers]m=r.sub==p.sub&&keyMatch2(r.obj,p.obj)&&r.act==p.actverification在执行授权之前,添加一些默认策略:idptypev0v1v21ptest_user/usersGET2ptest_user/users/:idGET添加路由及其中间件:Route::group('users',function(){Route::get('',function(){return'Usersdata.';});Route::get('/:id',function($id){return'User:'.$id;});})->middleware(\app\http\middleware\Authorization::class);先登录用户,将用户名保存到SESSION,可以访问/users,/users/1验证权限更多API参考管理APIRBACAPI