easyswoole-tool / hyperf-orm-permission
EsaySwoole Hyperf Orm 中支持访问控制模型如 ACL、RBAC、ABAC 的授权库。
dev-master
2021-07-26 08:45 UTC
Requires
- php: >=7.2.0
- casbin/casbin: ^2.2
- easyswoole/hyperf-orm: dev-master
This package is auto-updated.
Last update: 2024-09-26 15:30:55 UTC
README
EasySwoole Hyperf Orm Permission
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一
composer require easyswoole-tool/hyperf-orm-permission dev-master
或者将以下内容添加到您的 composer.json
文件的 require 部分。
"easyswoole-tool/hyperf-orm-permission": "dev-master"
依赖项
easyswoole/hyperf-orm
配置
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_at` int NULL DEFAULT NULL, `update_at` int NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
// dev.php
DI
<?php return [ /* * Casbin model setting. */ 'model' => [ // Available Settings: "file", "text" 'config_type' => 'file', 'config_file_path' => __DIR__ . '/casbin-rbac-model.conf', 'config_text' => '', ], /* * Casbin adapter . */ 'adapter' => \EasySwooleTool\HyperfOrm\Permission\Adapters\DatabaseAdapter::class, /* * Database setting. */ 'database' => [ // Database connection for following tables. 'connection' => '', // Rule table name. 'rules_table' => 'rules', ], 'log' => [ // changes whether Lauthz will log messages to the Logger. 'enabled' => false, ], ];
// EasySwooleEvent.php
使用
use EasySwooleTool\HyperfOrm\Permission\Adapters\DatabaseAdapter; use EasySwooleTool\HyperfOrm\Permission\Models\Rule; use EasySwoole\Component\Di; Di::getInstance()->set(DatabaseAdapter::class, DatabaseAdapter::class); Di::getInstance()->set(Rule::class, Rule::class, []);
安装完成后,您可以进行如下操作
检查用户是否有权限,例如
use EasySwooleTool\HyperfOrm\Permission\Casbin; $casbin = (new Casbin())->getEnforcer(); // 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');
使用 Enforcer API
// 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 }
它提供了一个非常丰富的 API,以简化对策略的各种操作
获取所有角色
获取策略中的所有授权规则。
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。