我的第一个webman插件webman/casbin权限控制插件

Tinywan

webman casbin 权限控制插件

Latest Stable Version

Total Downloads

项目地址:https://github.com/Tinywan/casbin

webman casbin 权限控制插件。它基于 PHP-Casbin, 一个强大的、高效的开源访问控制框架,支持基于ACL, RBAC, ABAC等访问控制模型。

在这之前,你需要了解 Casbin 的相关知识。

插件需要 webman>=1.2.0 webman-framework>=1.2.0

依赖

依赖注入配置

修改配置config/container.php,其最终内容如下:

$builder = new \DI\ContainerBuilder();
$builder->addDefinitions(config('dependence', []));
$builder->useAutowiring(true);
return $builder->build();

安装

composer require tinywan/casbin

配置

数据库配置

(1)修改数据库 thinkorm 配置

(2)创建 casbin_rule 数据表

CREATE TABLE `casbin_rule` (
    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT,
    `ptype` VARCHAR ( 128 ) NOT NULL DEFAULT '',
    `v0` VARCHAR ( 128 ) NOT NULL DEFAULT '',
    `v1` VARCHAR ( 128 ) NOT NULL DEFAULT '',
    `v2` VARCHAR ( 128 ) NOT NULL DEFAULT '',
    `v3` VARCHAR ( 128 ) NOT NULL DEFAULT '',
    `v4` VARCHAR ( 128 ) NOT NULL DEFAULT '',
    `v5` VARCHAR ( 128 ) NOT NULL DEFAULT '',
    PRIMARY KEY ( `id` ) USING BTREE,
    KEY `idx_ptype` ( `ptype` ) USING BTREE,
    KEY `idx_v0` ( `v0` ) USING BTREE,
    KEY `idx_v1` ( `v1` ) USING BTREE,
    KEY `idx_v2` ( `v2` ) USING BTREE,
    KEY `idx_v3` ( `v3` ) USING BTREE,
    KEY `idx_v4` ( `v4` ) USING BTREE,
    KEY `idx_v5` ( `v5` ) USING BTREE 
) ENGINE = INNODB CHARSET = utf8mb4 COMMENT = '策略规则表';

重启webman

php start.php restart

或者

php start.php restart -d

用法

快速开始

安装成功后,可以这样使用:

use Tinywan\Casbin\Permission;

// adds permissions to a user
Permission::addPermissionForUser('eve', 'articles', 'read');
// adds a role for a user.
Permission::addRoleForUser('eve', 'writer');
// adds permissions to a rule
Permission::addPolicy('writer', 'articles','edit');

你可以检查一个用户是否拥有某个权限:

if (Permission::enforce("eve", "articles", "edit")) {
    echo '恭喜你!通过权限认证';
} else {
    echo '对不起,您没有该资源访问权限';
}

更多 API 参考 Casbin API

感谢

Casbin,你可以查看全部文档在其 官网 上。

阅读 314
3个评论

walkor

果然强大

  • 暂无评论
yzh52521

666

  • 暂无评论
Tinywan

该版本使用多进程 Redis Watcher替换了之前的定时器(Timer)模式(无效的刷新策略问题)

  1. 由于webman是基于workerman的常驻内存框架。运行模式为多进程,而多进程中数据是互相隔离的。
  2. 在webman中使用casbin,当Enforcer中的策略发生变化时,调用 Watcher,向消息队列(MQ)中推动消息,监听该消息队列的Enforcer收到后,自动刷新该实例中的策略
  3. 这里通过 workerman/redis 的发布订阅模式实现
  • 暂无评论

Tinywan

2970
积分
0
获赞数
0
粉丝数
2020-01-14 加入