ANTLR Grammar for the OpenFGA DSL and parser from and to the OpenFGA JSON Syntax
OpenFGA is an open source Fine-Grained Authorization solution inspired by Google's Zanzibar paper. It was created by the FGA team at Auth0 based on Auth0 Fine-Grained Authorization (FGA), available under a permissive license (Apache-2) and welcomes community contributions.
OpenFGA is designed to make it easy for application builders to model their permission layer, and to add and integrate fine-grained authorization into their applications. OpenFGA’s design is optimized for reliability and low latency at a high scale.
- OpenFGA Documentation
- OpenFGA API Documentation
- OpenFGA Community
- Zanzibar Academy
- Google's Zanzibar Paper (2019)
This repo contains everything needed to interact with the OpenFGA Authorization Models schema versions 1.1+, in multiple languages (currently, Go and JS are supported).
Feature | Implemented in ANTLR |
---|---|
Basic DSL | ✅ |
Nesting | ✅ (partial, see #113) |
Conditions | ✅ |
Feature | Go | JS | Java |
---|---|---|---|
Transformer from the DSL to JSON and from JSON to DSL | ✅ | ✅ | ✅ |
Syntactic Model Validations | ✅ | ✅ | ✅ |
Semantic Model Validations | ❌ (planned, see #99) | ✅ | ✅ |
Graphing & Utility Methods | ❌ (planned) | ❌ (planned) | ❌ (planned) |
go get github.com/openfga/language/pkg/go
npm install @openfga/syntax-transformer@beta
import "github.com/openfga/language/pkg/go/transformer"
dslString := `model
schema 1.1
type user
type folder
relations
define viewer: [user]`
// Transform from DSL to a JSON string
generatedJsonString, err := transformer.TransformDSLToJSONString(dslString)
// Transform from a JSON string to DSL
generatedDsl, err := transformer.TransformJSONStringToDSL(generatedJsonString)
import { transformer } from "@openfga/syntax-transformer"
let dslString = `model
schema 1.1
type user
type folder
relations
define viewer: [user]`;
// Transform from DSL to a JSON string
const generatedJsonString = transformer.transformDSLToJSONString(dslString)
// Transform from a JSON string to DSL
const generatedDsl = transformer.transformJSONStringToDSL(generatedJsonString)
import dev.openfga.language.DslToJsonTransformer;
import dev.openfga.language.JsonToDslTransformer;
var dslString = """model
schema 1.1
type user
type folder
relations
define viewer: [user]""";
// Transform from DSL to a JSON string
var generatedJsonString = new DslToJsonTransformer().transform(dslString);
// Transform from a JSON string to DSL
var generatedDsl = new JsonToDslTransformer().transform(generatedJsonString);
Use the FGA CLI
Repo | License | Maintainers | Language | Schema v1.0 | Schema v1.1 | Package Managers | Other Links |
---|---|---|---|---|---|---|---|
openfga language (syntax-transformer) | Apache-2.0 | @openfga | ANTLR (Go and Typescript implementations) | <0.1.5 | Yes (v0.0.8+) | - | |
openfga-dsl-parser | Apache-2.0 | @maxmindlin - @dblclik | Rust | Yes | No | WASM - Python | |
openfga-rs | Apache-2.0 | @iammathew | Rust | Yes | No | ||
openfga-dsl-parser | Apache-2.0 | @craigpastro | ANTLR & Go | Yes | Partial (requires self). Supports nesting |
Repo | License | Maintainers | Language | Schema v1.0 | Schema v1.1 | Package Managers | Other Links |
---|---|---|---|---|---|---|---|
fga cli | Apache-2.0 | @openfga | Go | No | Yes | ||
fga-transformer-cli | MIT | @ozee-io | Javascript | Yes | Yes |
See CONTRIBUTING.
This project is licensed under the Apache-2.0 license. See the LICENSE file for more info.