OpenFGA Best Practices
Comprehensive guide for authoring OpenFGA authorization models and using OpenFGA SDKs, maintained for AI agents and developers. Contains rules across 7 categories covering core concepts, relationship patterns, testing, custom roles, model optimization, and language-specific SDK usage.
When to Apply
Reference these guidelines when:
- Creating new OpenFGA authorization models
- Defining types and relations in
.fgafiles - Writing relationship tuples
- Testing models with
.fga.yamlfiles - Implementing custom roles
- Reviewing or refactoring existing models
- Integrating OpenFGA with JavaScript/TypeScript, Go, Python, Java, or .NET applications
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Core Concepts | CRITICAL | core- |
| 2 | Relationship Definitions | CRITICAL | relation- |
| 3 | Testing & Validation | HIGH | test- |
| 4 | Model Design | HIGH | design- |
| 5 | Custom Roles | MEDIUM | roles- |
| 6 | Optimization | MEDIUM | optimize- |
| 7 | SDK Integration | HIGH | sdk- |
| 8 | Workflow | CRITICAL | workflow- |
Quick Reference
1. Core Concepts (CRITICAL)
core-types- Define types for all entity classescore-schema-version- Always use schema 1.1core-relations- Define relations on object types, not user typescore-tuples- Write relationship tuples to establish factscore-separation- Separate schema (model) from data (tuples)
2. Relationship Definitions (CRITICAL)
relation-direct- Use[type]for direct assignmentsrelation-concentric- Useorfor permission inheritancerelation-indirect- UseX from Yfor hierarchical accessrelation-usersets- Usetype#relationfor group-based accessrelation-conditions- Use CEL conditions for contextual authorizationrelation-wildcards- Usetype:*for public access carefullyrelation-wildcards-as-booleans- To usetype:*to model boolan attributes
3. Model Design (HIGH)
design-permissions- Definecan_*relations for permissionsdesign-hierarchy- Model parent-child relationships correctlydesign-organization- Structure organization-level accessdesign-naming- Use clear, consistent naming conventionsdesign-modules- Split a model in modules for collaboration among multiple teams.
4. Testing & Validation (HIGH)
test-fga-yaml- Structure tests in.fga.yamlfilestest-check-assertions- Write check assertions for permission verificationtest-list-objects- Test list_objects queriestest-list-users- Test list_users queriestest-conditions- Test conditional relationships with contexttest-cli- Use OpenFGA CLI for model testing
5. Custom Roles (MEDIUM)
roles-simple- Implement simple user-defined rolesroles-assignments- Use role assignments for resource-specific rolesroles-static-combo- Combine static and custom rolesroles-when-to-use- Choose the right role pattern
6. Optimization (MEDIUM)
optimize-simplify- Remove unused types and relationsoptimize-tuples- Use indirect relationships to reduce tuple countoptimize-type-restrictions- Apply appropriate type restrictions
7. SDK Integration (HIGH)
sdk-javascript- JavaScript/TypeScript SDK usagesdk-go- Go SDK usagesdk-python- Python SDK usage (async and sync)sdk-java- Java SDK usagesdk-dotnet- .NET SDK usage
8. Workflow (CRITICAL)
workflow-validate- Always validate models before delivery
How to Use
Read individual rule files for detailed explanations and code examples:
rules/core-types.md
rules/relation-concentric.md
rules/test-fga-yaml.md
Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and references
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md