前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Webman实战教程:基于Casbin的权限管理访问控制插件应用

Webman实战教程:基于Casbin的权限管理访问控制插件应用

作者头像
Tinywan
发布2023-10-22 19:00:18
3880
发布2023-10-22 19:00:18
举报
文章被收录于专栏:开源技术小栈开源技术小栈

Casbin入门

简介

Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。支持的语言也很多,例如:PHP、go、java、node.js、python等等.

支持编程语言

2022

特性

Casbin 做了什么?

  1. 自定义请求的格式,默认的请求格式为{subject, object, action}
  2. 访问控制模型及其策略的存储。
  3. 支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。
  4. 支持超级用户,如 root 或 Administrator,超级用户可以不受授权策略的约束访问任意资源。
  5. 支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*。

Casbin 不做的事情

身份认证 authentication(即验证用户的用户名、密码),casbin只负责访问控制。应该有其他专门的组件负责身份认证,然后由casbin进行访问控制,二者是相互配合的关系。管理用户列表或角色列表。

Casbin 认为由项目自身来管理用户、角色列表更为合适, 用户通常有他们的密码,但是 Casbin的设计思想并不是把它作为一个存储密码的容器。而是存储RBAC方案中用户和角色之间的映射关系。

插件应用

安装

代码语言:javascript
复制
composer require -W casbin/webman-permission

使用

1. 依赖注入配置

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

代码语言:javascript
复制
$builder = new \DI\ContainerBuilder();
$builder->addDefinitions(config('dependence', []));
$builder->useAutowiring(true);
return $builder->build();

2. 数据库配置

默认策略存储是使用的ThinkORM。如使用 laravel的数据库 illuminate/database,请按照官方文档按照相应的依赖包:https://www.workerman.net/doc/webman/db/tutorial.html

1、模型配置

以下模型可以二选一,ThinkORM(默认)

使用ThinkORM(默认)

修改数据库 thinkorm.php 配置

使用laravel数据库(可选)
  1. 修改数据库 database.php 配置
  2. 修改数据库 permission.phpadapter适配器为laravel适配器
2、创建 casbin_rule 数据表
代码语言:javascript
复制
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 = '策略规则表';
3、配置 config/redis 配置
4、重启webman
代码语言:javascript
复制
php start.php restart

或者

代码语言:javascript
复制
php start.php restart -d

快速开始

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

代码语言:javascript
复制
use Casbin\WebmanPermission\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');

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

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

多套驱动配置

需要插件大于版本 webman-permission >=1.2.0

代码语言:javascript
复制
use Casbin\WebmanPermission\Permission;

$permission = Permission::driver("other_conf")
// 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 。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Casbin入门
    • 简介
      • 支持编程语言
        • 特性
          • Casbin 做了什么?
          • Casbin 不做的事情
      • 插件应用
        • 安装
          • 使用
            • 1. 依赖注入配置
            • 2. 数据库配置
          • 快速开始
            • 多套驱动配置
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档