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 库,并编写代码来加载策略文件和检查权限。以下是一个简单的示例:
<?php
require_once 'vendor/autoload.php';
use Zly\Casbin\Enforcer;
use Zly\Casbin\Model;
// 加载策略文件
$policyPath = __DIR__ . '/casbin/policy.csv';
$model = new Model();
$model->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 中,你可以在中间件中进行权限检查:
<?php
namespace App\Http\Middleware;
use Closure;
use Zly\Casbin\Enforcer;
use Zly\Casbin\Model;
class CasbinMiddleware
{
protected $enforcer;
public function __construct()
{
$policyPath = base_path('casbin/policy.csv');
$model = new Model();
$model->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,实现基于角色的访问控制。