diff --git a/stores/modular/README.md b/stores/modular/README.md new file mode 100644 index 0000000..94efe3b --- /dev/null +++ b/stores/modular/README.md @@ -0,0 +1,13 @@ +# OpenFGA Modular Model Sample Store + +* **Title**: **Modular Model** + +## Use-Case + +This example showcases how to use modular models to separate your model across multiple files and how to use type extensions within those modules. + +## Try It Out + +1. Make sure you have the [FGA CLI](https://github.com/openfga/cli/?tab=readme-ov-file#installation) + +2. In the `modular` directory, run `fga model test --tests store.fga.yaml` diff --git a/stores/modular/core.fga b/stores/modular/core.fga new file mode 100644 index 0000000..1a14fde --- /dev/null +++ b/stores/modular/core.fga @@ -0,0 +1,12 @@ +module core + +type user + +type organization + relations + define member: [user] or admin + define admin: [user] + +type group + relations + define member: [user] diff --git a/stores/modular/fga.mod b/stores/modular/fga.mod new file mode 100644 index 0000000..a21b254 --- /dev/null +++ b/stores/modular/fga.mod @@ -0,0 +1,6 @@ +schema: '1.2' +contents: + - core.fga + - issue-tracker/projects.fga + - issue-tracker/tickets.fga + - wiki.fga diff --git a/stores/modular/issue-tracker/projects.fga b/stores/modular/issue-tracker/projects.fga new file mode 100644 index 0000000..21ee3d4 --- /dev/null +++ b/stores/modular/issue-tracker/projects.fga @@ -0,0 +1,10 @@ +module issue-tracker + +extend type organization + relations + define can_create_project: admin + +type project + relations + define organization: [organization] + define viewer: member from organization diff --git a/stores/modular/issue-tracker/tickets.fga b/stores/modular/issue-tracker/tickets.fga new file mode 100644 index 0000000..9092c2d --- /dev/null +++ b/stores/modular/issue-tracker/tickets.fga @@ -0,0 +1,6 @@ +module issue-tracker + +type ticket + relations + define project: [project] + define owner: [user] diff --git a/stores/modular/store.fga.yaml b/stores/modular/store.fga.yaml new file mode 100644 index 0000000..e30d3ae --- /dev/null +++ b/stores/modular/store.fga.yaml @@ -0,0 +1,29 @@ +name: ModularDemo +model_file: ./fga.mod +tuples: + - user: user:anne + relation: admin + object: organization:openfga + - user: organization:openfga + relation: organization + object: space:openfga + - user: organization:openfga + relation: organization + object: project:openfga +tests: + - name: Members can view projects + check: + - user: user:anne + object: organization:openfga + assertions: + admin: true + member: true + can_create_space: true + - user: user:anne + object: space:openfga + assertions: + can_view_pages: true + - user: user:anne + object: project:openfga + assertions: + viewer: true diff --git a/stores/modular/wiki.fga b/stores/modular/wiki.fga new file mode 100644 index 0000000..5548842 --- /dev/null +++ b/stores/modular/wiki.fga @@ -0,0 +1,16 @@ +module wiki + +extend type organization + relations + define can_create_space: admin + + +type space + relations + define organization: [organization] + define can_view_pages: member from organization + +type page + relations + define space: [space] + define owner: [user]