easyswoole-tool/hyperf-orm-permission

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

dev-master 2021-07-26 08:45 UTC

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

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