OpenFGA-compatible relationship-based (Zanzibar-style) authorization engine: DSL, JSON models, Check, ListObjects, ListUsers, CEL conditions
| API | 通过 | 总数 | 失败 | 跳过 |
|---|---|---|---|---|
| Check | 516 | 516 | 0 | 0 |
| ListObjects | 354 | 354 | 0 | 0 |
| ListUsers | 393 | 394 | 0 | 1 |
| 能力 | 状态 | 说明 |
|---|---|---|
| Schema 1.1 DSL | 支持 | model、schema 1.1、type、relations、define、[user, group#member, user:*, user with cond]、or / and / but not、括号、computed userset、tuple-to-userset、condition、注释 |
| AuthorizationModel JSON | 支持 | 导入、导出;schema_version、type_definitions、relations、metadata.relations、conditions |
| 模型校验 | 支持 | 未知类型/关系、元组限制、禁止的循环、重复定义、条件参数类型;错误带行列位置 |
| 元组存储 | 支持 | 内存索引(按 object#relation、按 user)、写入/删除、上下文元组覆盖层、TupleReader trait |
| Check | 支持 | 完整 Check 请求深度预算 25、终端 join 不额外 dispatch、computed alias 迭代折叠、循环检测、通配符、union/intersection/difference 短路、TTU、条件求值 |
| BatchCheck | 支持 | 进程内批量执行,逐项返回结果或错误 |
| ListObjects / ListUsers | 支持 | 反向对象证明 / 用户集合展开、独立深度与条件错误传播、wildcard、userset 过滤器、contextual 合并语义 |
| Expand | 支持 | 返回关系重写树 |
| Explain | 支持 | 返回允许/拒绝的解析路径(--explain,Playground 里画成树) |
| CEL 子集 | 支持 | int / uint / double / bool / string / duration / timestamp / list / map / ipaddress,运算符、三元表达式、exists / exists_one / all / map / filter、常用字符串/时间/网络方法 |
| CLI | 支持 | validate、transform、check、list-objects、list-users、expand、test |
| .fga.yaml 测试 | 支持 | model / model_file、全局与用例元组、Check / ListObjects / ListUsers 断言、errorCode |
| ReadChanges | 不支持 | 内存存储没有变更日志 |
| FGA Modules | 不支持 | module / extends 语法与模块合并未实现;单文件模型可完整使用 |
| 持久化存储 / HTTP / gRPC | 不支持 | 只提供可嵌入的内存引擎和 CLI,持久化需要调用方自己封装 |
| 分页、consistency preference | 不支持 | List 接口一次返回全部结果 |
scripts/build-web.sh
node web/smoke.mjs # 对内置示例做冒烟断言
python3 -m http.server -d web/dist # 然后访问 http://localhost:8000git clone https://github.com/sundaysebasidian-byte/moonfga
cd moonfga
export PATH="$HOME/.moon/bin:$PATH"
moon check --deny-warn
moon testmoon test --target native
moon test --target wasm-gc
moon test --target jsimport {
"sundaysebasidian-byte/moonfga/fga",
"sundaysebasidian-byte/moonfga/dsl",
"sundaysebasidian-byte/moonfga/store",
"sundaysebasidian-byte/moonfga/engine",
}let model = @dsl.parse_model(
"model\n schema 1.1\n\ntype user\n\ntype group\n relations\n define member: [user]\n\ntype document\n relations\n define viewer: [user, group#member]\n",
)
let store = @store.MemoryStore::new()
let _ = store.write(
@fga.Tuple::{ object: "group:eng", relation: "member", user: "user:anne", condition: None },
)
let _ = store.write(
@fga.Tuple::{ object: "document:roadmap", relation: "viewer", user: "group:eng#member", condition: None },
)
let engine = @engine.Engine::new(model, store as &@fga.TupleReader)
let allowed = engine.check("document:roadmap", "viewer", "user:anne")
println(allowed.to_string()) // truemoon run examples/library# 校验 DSL 或 JSON 模型
moon run cmd/main -- validate examples/basic/model.fga
# DSL -> JSON / JSON -> DSL
moon run cmd/main -- transform examples/basic/model.fga --to json
moon run cmd/main -- transform examples/basic/model.fga --to dsl
# Check(--explain 打印解析路径)
moon run cmd/main -- check \
--model examples/basic/model.fga \
--store examples/basic/tuples.fga \
--object document:budget --relation viewer --user user:bob --explain
# ListObjects / ListUsers
moon run cmd/main -- list-objects \
--model examples/basic/model.fga --store examples/basic/tuples.fga \
--type document --relation viewer --user user:bob
moon run cmd/main -- list-users \
--model examples/basic/model.fga --store examples/basic/tuples.fga \
--object document:budget --relation viewer --filters user
# Expand 关系树
moon run cmd/main -- expand \
--model examples/basic/model.fga --store examples/basic/tuples.fga \
--object document:budget --relation viewer
# 条件(ABAC)示例
moon run cmd/main -- check \
--model examples/abac/model.fga --store examples/abac/tuples.fga \
--object document:plan --relation viewer --user user:dana \
--context '{"office":"hq","allowed":["remote"]}'
# 运行 .fga.yaml 测试
moon run cmd/main -- test examples/basic/store.fga.yaml
moon run cmd/main -- test examples/abac/store.fga.yamlscripts/fetch-upstream.sh # 首次运行,固定 commit
./scripts/conformance.sh # 运行两个矩阵并检查 95/90 阈值
moon run cmd/language # DSL <-> JSON 夹具,29/29Install
Download zipOpenFGA-compatible relationship-based (Zanzibar-style) authorization engine: DSL, JSON models, Check, ListObjects, ListUsers, CEL conditions