当前位置: 首页 > article >正文

OpenFGA

1.什么是OpenFGA

Fine-Grained Authorization  细粒度关系型授权

2.什么是细粒度授权

细粒度授权 (FGA) 意味着能够授予特定用户在特定资源中执行特定操作的权限。 精心设计的 FGA 系统允许您管理数百万个对象和用户的权限。随着系统不断添加对象并更新用户的访问权限,这些权限可能会迅速变化。

3.概念

类型  授权模型 存储 对象 用户 关系元组 关系 

一个存储相当于 存储了一个或多个版本的 授权模型 ,授权模型是不可变的,只能由版本进行不断添加来迭代 

授权模型里面定义了 类型 与 关系  之间直接与暗示的关联

对象 万物抽象的具体 皆对象 

所以 用户其实也是用户类型下的一个对象, 关系是指在 一个类型中 所在与其他类型或 用户集等直接的关联

用户也是一个抽象 既 对资源访问的对象 既用户 也可以说 自己若是访问自己,那自己就是用户

关系元组 由 用户 关系 与对象  被授权模型与类型来作限制 共同创建出来的 一个个的关系元组

这就是总体的理解

4.安装

环境 Docker  MySQL

1.创建docker-compose.yaml文件

mkdir -p /opt/openFGA
cd /opt/openFGA
touch docker-compose.yaml
version: '3.8'

networks:
  openfga:

services:
  mysql:
    image: mysql:8
    container_name: mysql
    networks:
      - openfga
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=openfga
    healthcheck:
      test: ["CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD' ]
      timeout: 20s
      retries: 5

  migrate:
    depends_on:
        mysql:
            condition: service_healthy
    image: openfga/openfga:latest
    container_name: migrate
    command: migrate
    environment:
      - OPENFGA_DATASTORE_ENGINE=mysql
      - OPENFGA_DATASTORE_URI=root:secret@tcp(mysql:3306)/openfga?parseTime=true
    networks:
      - openfga

  openfga:
    depends_on:
      migrate:
        condition: service_completed_successfully
    image: openfga/openfga:latest
    container_name: openfga
    environment:
      - OPENFGA_DATASTORE_ENGINE=mysql
      - OPENFGA_DATASTORE_URI=root:secret@tcp(mysql:3306)/openfga?parseTime=true
      - OPENFGA_LOG_FORMAT=json
    command: run --profiler-enabled --profiler-addr :3002 --playground-enabled --playground-port 3001
    networks:
      - openfga
    ports:
      # Needed for the http server
      - "8080:8080"
      # Needed for the grpc server (if used)
      - "8081:8081"
      # Needed for the playground (Do not enable in prod!)
      - "3000:3000"
      - "3002:3002"
      - "3001:3001"

这里用的测试环境 所以Mysql 不改了 就是 直接默认的 密码 是 secret 

2.启动容器

docker compose up -d

5.创建Java 项目 

导入依赖

  <dependency>
            <groupId>dev.openfga</groupId>
            <artifactId>openfga-sdk</artifactId>
            <version>0.3.1</version>
        </dependency>

6.创建一个Store

package com.jmj.openfgastudy.createStore;

import dev.openfga.sdk.api.client.OpenFgaClient;
import dev.openfga.sdk.api.client.model.ClientCreateStoreResponse;
import dev.openfga.sdk.api.configuration.ClientConfiguration;
import dev.openfga.sdk.api.model.CreateStoreRequest;
import dev.openfga.sdk.errors.FgaInvalidParameterException;

import java.util.concurrent.ExecutionException;

import static com.jmj.openfgastudy.common.GlobalConst.FGA_API_URL;
import static com.jmj.openfgastudy.common.GlobalConst.FGA_STORE_NAME;

/**
 * 创建一个Store
 */
public class CreateStore {
    public static void main(String[] args) throws FgaInvalidParameterException, ExecutionException, InterruptedException {
        //创建配置
        ClientConfiguration config = new ClientConfiguration()
                .apiUrl(FGA_API_URL);

        //创建客户端
        OpenFgaClient fgaClient = new OpenFgaClient(config);

        /**
         * 请求体
         */
        CreateStoreRequest body = new CreateStoreRequest().name(FGA_STORE_NAME);

        ClientCreateStoreResponse response = fgaClient.createStore(body).get();

        String rawResponse = response.getRawResponse();
        System.out.println("rawResponse:"+rawResponse);
        String id = response.getId();
        System.out.println("id:"+id);
        String name = response.getName();
        System.out.println("name:"+name);
    }
}

id为StoreId


http://www.kler.cn/a/518764.html

相关文章:

  • 在Ubuntu上使用Apache+MariaDB安装部署Nextcloud并修改默认存储路径
  • 单片机-STM32 WIFI模块--ESP8266 (十二)
  • Redis高阶5-布隆过滤器
  • Qt中QVariant的使用
  • 【后端开发】字节跳动青训营之性能分析工具pprof
  • 科普篇 | “机架、塔式、刀片”三类服务器对比
  • 小识JVM堆内存管理的优化机制TLAB
  • 基于模糊PID的孵化箱温度控制系统(论文+源码)
  • vue3 vue2区别
  • C#常考随笔1:const和readonly有什么区别?
  • [笔记] 极狐GitLab实例 : 手动备份步骤总结
  • Windows11离线安装wsl2(适用于 Linux 的 Windows 子系统)和Ubuntu
  • Android Toast 系统切换多语言显示
  • 当AI风暴来袭:中美科技商业版图的迥异走向
  • MyBatis 写法
  • 力扣算法题——1089.复写零【系统讲解】
  • 回归测试中的自动化与手动测试平衡
  • 大数运算之C语言实现
  • STM32项目分享:智能语音分类垃圾桶
  • 基于Flask的微博话题舆情分析可视化系统的设计与实现
  • Java Swing 基础组件详解 [论文投稿-第四届智能系统、通信与计算机网络]
  • 数据结构与算法之堆: LeetCode 208. 实现 Trie (前缀树) (Ts版)
  • Java面试题2025-Mysql
  • Pandas与Numpy的数据分析进阶题
  • 免费GPU算力,不花钱部署DeepSeek-R1
  • 【由浅入深认识Maven】第2部分 maven依赖管理与仓库机制