casbin/easyswoole-permission

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

v1.6.0 2021-11-22 14:17 UTC

This package is auto-updated.

Last update: 2024-09-22 20:19:03 UTC


README

easyswoole-permission是easyswoole框架的授权库。

Build Status Coverage Status Latest Stable Version Total Downloads License

中文版

它基于Casbin,一个支持访问控制模型如ACLRBACABAC的授权库。

使用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许可协议