Casbin 是一个用于访问控制策略的库,它可以帮助你在 Web 应用中实现基于角色的访问控制(RBAC)。要在 Web 应用中配置 PHP 的 Casbin,你需要遵循以下步骤:
-
安装 Casbin:
使用 Composer 安装 PHP 的 Casbin 库。在你的项目根目录下运行以下命令:
composer require zly/casbin-php
-
创建策略文件:
在你的项目中创建一个名为
casbin/policy.csv
的文件,用于存储访问控制策略。策略文件的格式如下:p, user1, role1, /path/to/resource1, GET p, user2, role2, /path/to/resource2, POST
其中,
p
表示策略类型(允许或拒绝),user1
和user2
是用户名,role1
和role2
是角色,/path/to/resource1
和/path/to/resource2
是资源路径,GET
和POST
是 HTTP 方法。 -
编写代码:
在你的 Web 应用中引入 Casbin 库,并编写代码来加载策略文件和检查权限。以下是一个简单的示例:
loadPolicy($policyPath); // 创建 Enforcer 实例 $enforcer = new Enforcer($model); // 检查权限 $user = 'user1'; $resource = '/path/to/resource1'; $action = 'GET'; if ($enforcer->enforce($user, $resource, $action)) { echo "Access granted"; } else { echo "Access denied"; }
-
集成到 Web 框架:
根据你使用的 Web 框架(如 Laravel、Symfony 等),将上述代码集成到相应的认证和授权逻辑中。例如,在 Laravel 中,你可以在中间件中进行权限检查:
loadPolicy($policyPath); $this->enforcer = new Enforcer($model); } public function handle($request, Closure $next) { $user = auth()->user()->name; $resource = $request->path(); $action = $request->method(); if ($this->enforcer->enforce($user, $resource, $action)) { return $next($request); } else { abort(403, "Access denied"); } } }
然后,在
app/Http/Kernel.php
文件中将该中间件添加到全局中间件数组中:protected $middleware = [ // ... \App\Http\Middleware\CasbinMiddleware::class, ];
通过以上步骤,你可以在 Web 应用中配置 PHP 的 Casbin,实现基于角色的访问控制。