Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。支持的语言也很多。例如:PHP、Golang、Java、Python等等.
composer require -W casbin/webman-permission
插件地址:
https://www.workerman.net/plugin/6
修改配置config/container.php
其最终内容如下:
$builder = new \DI\ContainerBuilder();
$builder->addDefinitions(config('dependence', []));
$builder->useAutowiring(true);
return $builder->build();
默认策略存储是使用的ThinkORM
。如使用 laravel的数据库 illuminate/database
,请按照官方文档按照相应的依赖包:https://www.workerman.net/doc/webman/db/tutorial.html
创建
casbin_rule
数据表
CREATE TABLE `casbin_rule` (
`id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT,
`ptype` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v0` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v1` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v2` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v3` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v4` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v5` VARCHAR ( 128 ) NOT NULL DEFAULT '',
PRIMARY KEY ( `id` ) USING BTREE,
KEY `idx_ptype` ( `ptype` ) USING BTREE,
KEY `idx_v0` ( `v0` ) USING BTREE,
KEY `idx_v1` ( `v1` ) USING BTREE,
KEY `idx_v2` ( `v2` ) USING BTREE,
KEY `idx_v3` ( `v3` ) USING BTREE,
KEY `idx_v4` ( `v4` ) USING BTREE,
KEY `idx_v5` ( `v5` ) USING BTREE
) ENGINE = INNODB CHARSET = utf8mb4 COMMENT = '策略规则表';
config/redis
配置return [
'default' => [
'host' => 'dnmp-redis',
'password' => '123456',
'port' => 6379,
'database' => 0,
],
'pool_size' => 3,
];
安装成功后,可以这样使用
use Casbin\WebmanPermission\Permission;
// adds permissions to a user
Permission::addPermissionForUser('eve', 'articles', 'read');
// adds a role for a user.
Permission::addRoleForUser('eve', 'writer');
// adds permissions to a rule
Permission::addPolicy('writer', 'articles','edit');
你可以检查一个用户是否拥有某个权限
use Casbin\WebmanPermission\Permission;
if (Permission::enforce("eve", "articles", "edit")) {
echo '恭喜你!通过权限认证';
} else {
echo '对不起,您没有该资源访问权限';
}
启动webman,请求访问结果
v2.0.0
版本日志支持PSR-3
标准接口\Psr\Log\LoggerInterface
规范,可以自定义日志系统了。
日志配置文件app/config/plugin/casbin/webman-permission/permission.php
/** 日志配置 */
'log' => [
'enabled' => true, // changes will log messages to the Logger.
'logger' => 'Casbin', // Casbin Logger, Supported: \Psr\Log\LoggerInterface|string
'path' => runtime_path() . '/logs/casbin.log' // log path
],
默认日志为关闭状态,可以开启casbin日志,在开发阶段进行调试,开启后记录系统日志
如以上配置会在/app/runtime/logs/casbin.log
生成日志
[2024-11-02T00:49:34.311871+08:00] Casbin.INFO: Model: {info} {"info":"[r r sub, obj, act] \n[p p sub, obj, act] \n[e e some(where (p_eft == allow))] \n[m m g(r_sub, p_sub) && r_obj == p_obj && r_act == p_act] \n[g g _, _] \n"} []
[2024-11-02T00:49:34.440760+08:00] Casbin.INFO: Policy: {policy} {"policy":"p : [[eve articles read] [writer articles edit] \ng : [[eve writer]]"} []
[2024-11-02T00:49:34.640251+08:00] Casbin.INFO: Request: {request}Hit Policy: {hitPolicy} {"request":"eve, articles, edit ---> true\n","hitPolicy":"writer, articles, edit\n"} []
[2024-11-02T00:51:06.555977+08:00] Casbin.INFO: Model: {info} {"info":"[r r sub, obj, act] \n[p p sub, obj, act] \n[e e some(where (p_eft == allow))] \n[m m g(r_sub, p_sub) && r_obj == p_obj && r_act == p_act] \n[g g _, _] \n"} []
[2024-11-02T00:51:06.684262+08:00] Casbin.INFO: Policy: {policy} {"policy":"p : [[eve articles read] [writer articles edit] \ng : [[eve writer]]"} []
[2024-11-02T00:51:06.869057+08:00] Casbin.INFO: Request: {request}Hit Policy: {hitPolicy} {"request":"eve, articles, edit ---> true\n","hitPolicy":"writer, articles, edit\n"} []
[2024-11-02T00:51:32.793886+08:00] Casbin.INFO: Model: {info} {"info":"[r r sub, obj, act] \n[p p sub, obj, act] \n[e e some(where (p_eft == allow))] \n[m m g(r_sub, p_sub) && r_obj == p_obj && r_act == p_act] \n[g g _, _] \n"} []
[2024-11-02T00:51:32.917887+08:00] Casbin.INFO: Policy: {policy} {"policy":"p : [[eve articles read] [writer articles edit] \ng : [[eve writer]]"} []
[2024-11-02T00:51:33.172377+08:00] Casbin.INFO: Request: {request}Hit Policy: {hitPolicy} {"request":"eve, articles, edit1 ---> false\n","hitPolicy":""} []