飞布产品手册
官网B站Github
V1.0
V1.0
  • 序言
  • 更新日志
  • 产品简介
    • 什么是飞布?
    • 飞布的价值
    • 飞布的优势
    • 应用场景
    • 数据安全
    • 产品案例
  • 快速入门
    • 初识飞布
    • 快速上手
      • 图文版
    • 词汇概览
    • 工作原理
  • 基础-可视化开发
    • 概览
      • CLI
      • 控制台
        • 主功能区
    • 数据源
      • 数据库
        • 数据库连接
          • 高级设置
        • 数据建模
        • 数据预览
      • REST 数据源
      • GraphQL 数据源
      • 消息队列
    • API构建
      • 可视化构建
        • API规范
      • 批量新建
      • HTTP请求流程指令
      • 使用API
      • 实时查询
      • 实时推送
      • 关联查询
      • 数据缓存
      • 常见用例
    • 身份验证
      • 授权码模式
        • 身份验证(废弃)
      • 隐式模式
      • 数据权限控制
    • 身份授权
      • RBAC
        • 授权与访问控制(废弃)
      • 接口权限控制
      • 开放API
    • 文件存储
      • S3配置及使用
      • 文件管理面板
      • 高级配置:profile
  • 进阶-钩子机制
    • 钩子概览
    • 启动钩子
      • Node钩子
      • Golang钩子
      • Python钩子
      • Java钩子
    • OPERATION钩子
    • 身份验证钩子
    • graphql钩子
    • 函数钩子
      • functions(废弃)
      • proxys(废弃)
    • 文件上传钩子
    • 内部调用
  • 使用-部署上线
    • 部署运维
      • 手动部署
        • 流水线部署(废弃)
      • Docker部署
      • 飞布云
    • 接口安全
      • CSRF token 保护
      • 跨域访问
    • 客户端SDK
      • 微信小程序SDK
      • Flutter SDK
      • uniapp SDK
  • 环境准备
    • 文件存储 S3
    • 身份认证 OIDC
    • NodeJs环境
  • 实战案例
    • Fireboom Admin
      • 管理后台-refine(废弃)
    • 实时TODO LIST
    • 语音版ChatGPT
    • AI魔法师实战
    • 阿里低代码引擎
  • 路线图
  • 常见问题
  • 核心概念
    • GraphQL
    • 超图
    • 请求时序图
    • 服务端Operation
  • 二次开发
    • 钩子规范
      • 钩子规范bak
    • 模板规范
    • 自定义模板
    • 其它参考
由 GitBook 提供支持
在本页
  • 快速操作
  • 基本设置
  • API设置
  • 工作原理
  • RBAC模型
  • 角色注入
  • 匹配规则
  • 下一步

这有帮助吗?

在GitHub上编辑
  1. 基础-可视化开发
  2. 身份授权
  3. RBAC

授权与访问控制(废弃)

上一页RBAC下一页接口权限控制

最后更新于1年前

这有帮助吗?

飞布基于RBAC规范,结合GraphQL的注解能力,实现了API的的授权与访问控制。

快速操作

基本设置

  1. 根据业务需求添加角色,系统默认内置admin和user角色(请确保必须有1个角色)

  2. 切换到“身份鉴权”TAB,在auth目录下选择mutatingPostAuthentication文件

custom-ts/auth/mutatingPostAuthentication.ts
import { AuthenticationHookRequest, AuthenticationResponse } from 'fireboom-wundersdk/server'
import type { User,Role } from "generated/claims"
export default async function mutatingPostAuthentication(hook: AuthenticationHookRequest) : Promise<AuthenticationResponse<User>>{
 let roles=getRolesByUid(hook.user.userId!)
 return {
          user: {...hook.user,roles},
          status: 'ok',
        }
}
function getRolesByUid( uid:string ) :Role[]{
 //TODO:根据用户uid获取用户角色

 return ["user"]
}
custom-go/auth/mutatingPostAuthentication.go
package auth

import (
	"custom-go/pkg/base"
	"custom-go/pkg/plugins"
)

func MutatingPostAuthentication(hook *base.AuthenticationHookRequest) (*plugins.AuthenticationResponse, error) {

	hook.User.Roles = []string{
		"user",
	}
	res := plugins.AuthenticationResponse{
		Status: "ok",
		User:   *hook.User,
	}
	return &res, nil
}

API设置

  1. 前往API管理面板,选择需要设置权限的API

  2. 在GraphQL编辑区的工具栏中点击“@角色”,选择匹配模式并添加角色,如添加admin角色

  3. 在预览页顶部,选择OIDC供应商,点击前往登录

  4. 登录后可查看用户信息,可以看到当前登录用户roles字段包含user角色

  5. 输入参数,测试接口,发现接口返回401

  6. 重复步骤2,添加admin角色

  7. 重复步骤6,可以看到接口执行成功

工作原理

RBAC模型

RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。

从模型中可以看出,我们要实现两个关键工作:

  • 角色绑定权限:快速操作->API设置中介绍了该过程。

  • 用户绑定角色:快速操作->基本设置中介绍了该过程。

因此,在调用API接口时,只需要判断用户是否拥有当前API的权限即可。

角色注入

由于OIDC规范中没有用户角色的相关声明,用户通过OIDC流程登录后,claim中不包含roles字段。而RBAC要求用户绑定角色,通过角色匹配接口权限。

匹配规则

飞布支持四种匹配模式,我们以集合的概念进行讲解。

首先,需要知道三个集合域:

  • 全部角色:角色管理列表中配置的角色

  • API角色:API RBAC指令上所设置的角色

query GetOneTodo($id: Int!) @rbac(requireMatchAny: [admin]) {
  data: todo_findFirstTodo(where: {id: {equals: $id}}) {
    id
    title
    completed
    createdAt
  }
}

然后,了解四种集合关系:

  • requireMatchAll:全部匹配,用户角色包含API角色时,可访问

  • requireMatchAny:任意匹配,用户角色与API角色有交集时,可访问

  • denyMatchAll:非全部匹配,当任意匹配或互斥匹配时,可访问

  • denyMatchAny:互斥匹配,用户角色与API角色互斥时,可访问

最后,以全部角色作为全集,结合四种关系,看用户角色和API角色的交并补情况,确定当前用户是否能访问当前API。

下一步

在身份验证面板中点击“”,进入“角色管理”TAB

编写钩子脚本或选择预制脚本,这里设置所有用户拥有user权限,启动钩子,详情前往

点击顶部菜单栏的“”,前往API预览页,选择当前API

RBAC

因此,需要有个地方为用户动态注入roles字段,即用户第一次登录时,根据用户ID或email去特定数据源(可能是自有数据库或者其他数据源)查找其关联的角色,并绑定到roles字段上。考虑到灵活扩展,钩子是实现该功能的最佳场所。具体代码,参考 。

用户角色:用户拥有的角色,对应钩子中为用户设置的角色

飞布提供了完整的后台管理示例,您可以实现自己的管理后台。

钩子章节
参考代码
上文
mutatingPostAuthentication
头像
预览
全部角色
03功能介绍 如何用飞布实现API授权和访问控制?