casbin / easyswoole-permission
EasySwoole中支持访问控制模型如ACL、RBAC、ABAC的授权库。
v1.6.0
2021-11-22 14:17 UTC
Requires
- php: ^7.2
- ext-swoole: >=4.4
- casbin/casbin: ~3.0
- easyswoole/easyswoole: ~3.3|~3.4
- easyswoole/orm: ^1.4
Requires (Dev)
- easyswoole/easyswoole: ~3.3|~3.4
- easyswoole/phpunit: ^1.0
README
easyswoole-permission是easyswoole框架的授权库。
它基于Casbin,一个支持访问控制模型如ACL
、RBAC
、ABAC
的授权库。
使用Casbin之前,您需要先了解它。
安装
在您的easyswoole项目的composer.json
中添加此包。这将下载包。
$ composer install
或者在您的easyswoole应用程序的根目录下,可以使用以下composer命令直接安装此包。
$ composer require casbin/easyswoole-permission
用法
数据库设置
将mysql配置添加到dev.php
/*################ MYSQL CONFIG ##################*/ 'MYSQL' => [ 'host' => '127.0.0.1', 'port' => 3306, 'user' => 'root', 'password' => 'root', 'database' => 'easyswoole', 'timeout' => 5, 'charset' => 'utf8mb4', ]
将mysql配置添加到EasySwooleEvent.php
use EasySwoole\ORM\Db\Connection; use EasySwoole\ORM\DbManager; public static function initialize() { ... $config = new \EasySwoole\ORM\Db\Config(Config::getInstance()->getConf('MYSQL')); DbManager::getInstance()->addConnection(new Connection($config)); }
创建对应的数据表
在使用之前,您需要为Casbin创建一个名为casbin_rules
的表来存储策略。
以mysql为例
CREATE TABLE if not exists `casbin_rules` ( `id` BigInt(20) unsigned NOT NULL AUTO_INCREMENT, `ptype` varchar(255) DEFAULT NULL, `v0` varchar(255) DEFAULT NULL, `v1` varchar(255) DEFAULT NULL, `v2` varchar(255) DEFAULT NULL, `v3` varchar(255) DEFAULT NULL, `v4` varchar(255) DEFAULT NULL, `v5` varchar(255) DEFAULT NULL, `create_time` timestamp NULL DEFAULT NULL, `update_time` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
快速入门
然后您可以像这样开始
use EasySwoole\Permission\Casbin; use EasySwoole\Permission\Config; $config = new Config(); $casbin = new Casbin($config); // adds permissions to a user $casbin->addPermissionForUser('eve', 'articles', 'read'); // adds a role for a user. $casbin->addRoleForUser('eve', 'writer'); // adds permissions to a rule $casbin->addPolicy('writer', 'articles', 'edit');
您可以使用以下方式检查用户是否有权限
// to check if a user has permission if ($casbin->enforce('eve', 'articles', 'edit')) { // permit eve to edit articles } else { // deny the request, show an error }
使用Enforcer API
它提供了一个非常丰富的API来方便对策略进行各种操作
首先创建enforcer类的实例,以下操作都是基于此实例的
$config = new Config(); $casbin = new Casbin($config); $enforcer = $casbin->enforcer();
获取所有角色
$enforcer->getAllRoles(); // ['writer', 'reader']
获取策略中的所有授权规则。
$enforcer->getPolicy();
获取用户拥有的角色。
$enforcer->getRolesForUser('eve'); // ['writer']
获取有角色的用户。
$enforcer->getUsersForRole('writer'); // ['eve']
确定用户是否有角色。
$enforcer->hasRoleForUser('eve', 'writer'); // true or false
为用户添加角色。
$enforcer->addRoleForUser('eve', 'writer');
为用户或角色添加权限。
// to user $enforcer->addPermissionForUser('eve', 'articles', 'read'); // to role $enforcer->addPermissionForUser('writer', 'articles','edit');
删除用户的角色。
$enforcer->deleteRoleForUser('eve', 'writer');
删除用户的所有角色。
$enforcer->deleteRolesForUser('eve');
删除角色。
$enforcer->deleteRole('writer');
删除权限。
$enforcer->deletePermission('articles', 'read'); // returns false if the permission does not exist (aka not affected).
删除用户或角色的权限。
$enforcer->deletePermissionForUser('eve', 'articles', 'read');
删除用户或角色的权限。
// to user $enforcer->deletePermissionsForUser('eve'); // to role $enforcer->deletePermissionsForUser('writer');
获取用户或角色的权限。
$enforcer->getPermissionsForUser('eve'); // return array
确定用户是否有权限。
$enforcer->hasPermissionForUser('eve', 'articles', 'read'); // true or false
更多API请见Casbin API。
思考
Casbin在Easyswoole中。您可以在网站上找到Casbin的完整文档。
许可协议
本项目采用Apache 2.0许可协议。