gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章如何使用Casbin作为ThinkPHP的权限控制中间件由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

概述

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

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

安装

创建 thinkphp 项目(如果没有):

?
1
composer create-project topthink/think=5.1.* tp5

在ThinkPHP项目里,安装Think-Casbin扩展:

?
1
composer require casbin/think-adapter

发布资源

?
1
php think casbin:publish

这将自动创建 model 配置文件config/casbin-basic-model.conf,和 Casbin 的配置文件config/casbin.php.

数据迁移

由于 Think-Casbin 默认将 Casbin 的策略(Policy)存储在数据库中,所以需要初始化数据库表信息.

执行前,请确保数据库连接信息配置正确,如需单独修改Casbin的数据库连接信息或表名,可以修改config/casbin.php里的配置.

?
1
php think casbin:migrate

这将会自动创建 Casbin 的策略(Policy)表casbin_rule.

中间件

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

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

?
1
php think make:middleware Authorization

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
namespace app\http\middleware;
 
use Casbin;
use think\facade\Session;
 
class Authorization
{
     public function handle( $request , \Closure $next )
     {
         // 当前登录用户名,这里以session为例
         // $user = Session::get('user_name') ?: 'test_user';
         $user = Session::get( 'user_name' );
 
         $url = $request ->url();
         $action = $request ->method();
 
         if (! $user ){
             return response()->data( 'Unauthenticated.' )->code(401);
         }
 
         if (!Casbin::enforce( $user , $url , $action )) {
             return response()->data( 'Unauthorized.' )->code(403);
         }
 
         return $next ( $request );
     }
}

Casbin Model 配置

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

?
1
2
3
4
5
6
7
8
9
10
11
[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.act

验证

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

id ptype v0 v1 v2
1 p test_user /users GET
2 p test_user /users/:id GET

添加路由及其中间件:

?
1
2
3
4
5
6
7
8
9
10
11
Route::group( 'users' , function () {
 
     Route::get( '' , function () {
         return 'Users data.' ;
     });
 
     Route::get( '/:id' , function ( $id ) {
         return 'User: ' . $id ;
     });
 
})->middleware(\app\http\middleware\Authorization:: class );

先登录用户保存用户名到SESSION,可以访问/users、/users/1验证一下权限.

以上就是如何使用Casbin作为ThinkPHP的权限控制中间件的详细内容,更多关于使用Casbin作为ThinkPHP的权限控制中间件的资料请关注我其它相关文章! 。

原文链接:https://www.cnblogs.com/a609251438/p/11892360.html 。

最后此篇关于如何使用Casbin作为ThinkPHP的权限控制中间件的文章就讲到这里了,如果你想了解更多关于如何使用Casbin作为ThinkPHP的权限控制中间件的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com