casbin / webman-permission
webman casbin 权限插件
v1.2.5
2023-10-14 01:16 UTC
Requires
- php: >=7.4
- casbin/casbin: ^3.20
- doctrine/annotations: ^1.13
- php-di/php-di: ^6.3|^7.0
- topthink/think-orm: ^2.0|^3.0
- workerman/redis: ^1.0|^2.0
Requires (Dev)
- illuminate/database: ^8.83
- illuminate/events: ^8.83
- illuminate/pagination: ^8.83
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ~7.0|~8.0|~9.0
- psr/container: ^1.1.1
- symfony/var-dumper: ^6.2
- vlucas/phpdotenv: ^5.5
- webman/think-orm: ^1.0
- workerman/webman: ^1.0
README
Webman 授权插件
支持ACL、RBAC、ABAC等访问控制模型,为webman插件提供授权库
安装
composer require -W casbin/webman-permission
使用
依赖注入配置
修改配置config/container.php
,其最终内容如下:
$builder = new \DI\ContainerBuilder(); $builder->addDefinitions(config('dependence', [])); $builder->useAutowiring(true); return $builder->build();
数据库配置
默认策略存储使用ThinkORM。
1、模型配置
默认使用ThinkORM。修改数据库 thinkorm.php
配置
如使用laravel数据库,配置参考如下
- 修改数据库
database.php
配置 - 修改数据库
permission.php
的adapter
适配器为laravel适配器
2、创建 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 = '策略规则表';
3、配置 config/redis
配置
4、重启webman
php start.php restart
或者
php start.php restart -d
使用
安装成功后,可以这样使用
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');
你可以检查一个用户是否拥有某个权限
if (\Casbin\WebmanPermission\Permission::enforce('eve', 'articles', 'edit')) { echo '恭喜你!通过权限认证'; } else { echo '对不起,您没有该资源访问权限'; }
多套驱动配置
$permission = \Casbin\WebmanPermission\Permission::driver('restful_conf'); // 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'); if ($permission->enforce('eve', 'articles', 'edit')) { echo '恭喜你!通过权限认证'; } else { echo '对不起,您没有该资源访问权限'; }
更多 API
参考 Casbin API 。
教程
- Casbin权限实战:入门分享(中文)
- Casbin权限实战:基于角色的RBAC授权
- Casbin权限实战:RESTful及中间件使用
- Casbin权限实战:如何使用自定义匹配函数
- Webman实战教程:如何使用casbin权限控制
感谢
解除 https://github.com/PHP-DI/PHP-DI依赖的解决方案(不推荐)
1、卸载DI依赖包:composer remove php-di/php-di
2、修改:Casbin\WebmanPermission\Permission
文件
if (is_null(static::$_manager)) { static::$_manager = new Enforcer($model, Container::get($config['adapter']),false); }
替换为
if (is_null(static::$_manager)) { if ($config['adapter'] == DatabaseAdapter::class) { $_model = new RuleModel(); } elseif ($config['adapter'] == LaravelDatabaseAdapter::class) { $_model = new LaravelRuleModel(); } static::$_manager = new Enforcer($model, new $config['adapter']($_model), false); }
耦合度太高,不推荐这样做,更多了解:https://www.workerman.net/doc/webman/di.html