From 423ab7f23840d2168e75d5873befd7f350a799c9 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Wed, 23 Apr 2025 08:55:23 +1000 Subject: [PATCH 1/4] doc: add code example for context multitenancy --- documentation/topics/advanced/multitenancy.md | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/documentation/topics/advanced/multitenancy.md b/documentation/topics/advanced/multitenancy.md index cfdb49f12..ab8061d64 100644 --- a/documentation/topics/advanced/multitenancy.md +++ b/documentation/topics/advanced/multitenancy.md @@ -7,7 +7,7 @@ In Ash, there are two primary strategies for implementing multitenancy. The firs ## Attribute Multitenancy ```elixir -defmodule MyApp.Users do +defmodule MyApp.User do use Ash.Resource, ... multitenancy do @@ -124,9 +124,25 @@ User ## Context Multitenancy +```elixir +defmodule MyApp.Project do + use Ash.Resource, data_layer: AshPostgres.DataLayer + + multitenancy do + strategy :context + end + + ... + + relationships do + belongs_to :organization, MyApp.Organization + end +end +``` + Context multitenancy allows for the data layer to dictate how multitenancy works. For example, a csv data layer might implement multitenancy via saving the file with different suffixes, or an API wrapping data layer might use different subdomains for the tenant. -For `AshPostgres` context multitenancy, which uses postgres schemas and is referred to ash "Schema Based Multitenancy", see the [guide](https://hexdocs.pm/ash_postgres/schema-based-multitenancy.html) +For `AshPostgres` context multitenancy, which uses Postgres schemas and is referred to Ash "Schema Based Multitenancy", see the [guide](https://hexdocs.pm/ash_postgres/schema-based-multitenancy.html) ## Possible Values for tenant From a83d78235111fef1b4b74b1874894136840c04d6 Mon Sep 17 00:00:00 2001 From: Zach Daniel Date: Fri, 30 May 2025 00:32:36 -0400 Subject: [PATCH 2/4] Update documentation/topics/advanced/multitenancy.md --- documentation/topics/advanced/multitenancy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/topics/advanced/multitenancy.md b/documentation/topics/advanced/multitenancy.md index ab8061d64..9857cd0dc 100644 --- a/documentation/topics/advanced/multitenancy.md +++ b/documentation/topics/advanced/multitenancy.md @@ -135,7 +135,7 @@ defmodule MyApp.Project do ... relationships do - belongs_to :organization, MyApp.Organization + belongs_to :organization, MyApp.Accounts.Organization end end ``` From 3f0001d3790314d591922a1af9ce7f825de4d6ee Mon Sep 17 00:00:00 2001 From: Zach Daniel Date: Fri, 30 May 2025 00:32:42 -0400 Subject: [PATCH 3/4] Update documentation/topics/advanced/multitenancy.md --- documentation/topics/advanced/multitenancy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/topics/advanced/multitenancy.md b/documentation/topics/advanced/multitenancy.md index 9857cd0dc..85d224b10 100644 --- a/documentation/topics/advanced/multitenancy.md +++ b/documentation/topics/advanced/multitenancy.md @@ -125,7 +125,7 @@ User ## Context Multitenancy ```elixir -defmodule MyApp.Project do +defmodule MyApp.Projects.Project do use Ash.Resource, data_layer: AshPostgres.DataLayer multitenancy do From 9890185e6b87811e76746508cf79f531643ce054 Mon Sep 17 00:00:00 2001 From: Zach Daniel Date: Fri, 30 May 2025 00:32:57 -0400 Subject: [PATCH 4/4] Update documentation/topics/advanced/multitenancy.md --- documentation/topics/advanced/multitenancy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/topics/advanced/multitenancy.md b/documentation/topics/advanced/multitenancy.md index 85d224b10..78a4152e3 100644 --- a/documentation/topics/advanced/multitenancy.md +++ b/documentation/topics/advanced/multitenancy.md @@ -7,7 +7,7 @@ In Ash, there are two primary strategies for implementing multitenancy. The firs ## Attribute Multitenancy ```elixir -defmodule MyApp.User do +defmodule MyApp.Accounts.User do use Ash.Resource, ... multitenancy do