3212lin/hyperf-orm-permission

一个支持EsaySwoole Hyperf Orm中访问控制模型如ACL、RBAC、ABAC的授权库。

dev-master 2021-08-16 06:58 UTC

This package is auto-updated.

Last update: 2024-09-16 14:19:08 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

SQL

配置

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