Skip to content

Commit 9d6682b

Browse files
committed
feat: apply hierarchical tenant ancestor attributes in attribute multitenancy filters
1 parent f0a1759 commit 9d6682b

1 file changed

Lines changed: 12 additions & 9 deletions

File tree

lib/join.ex

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -556,17 +556,20 @@ defmodule AshSql.Join do
556556
def handle_attribute_multitenancy(query, tenant, read_action \\ nil) do
557557
if tenant && Ash.Resource.Info.multitenancy_strategy(query.resource) == :attribute &&
558558
(is_nil(read_action) || read_action.multitenancy not in [:bypass, :bypass_all]) do
559-
multitenancy_attribute = Ash.Resource.Info.multitenancy_attribute(query.resource)
559+
case Ash.Resource.Info.multitenancy_attribute_values(
560+
query.resource,
561+
tenant,
562+
query.to_tenant
563+
) do
564+
[] ->
565+
query
560566

561-
if multitenancy_attribute do
562-
{m, f, a} = Ash.Resource.Info.multitenancy_parse_attribute(query.resource)
563-
attribute_value = apply(m, f, [query.to_tenant | a])
567+
attribute_values ->
568+
query = Ash.Query.set_tenant(query, tenant)
564569

565-
query
566-
|> Ash.Query.set_tenant(tenant)
567-
|> Ash.Query.filter(^Ash.Expr.ref(multitenancy_attribute) == ^attribute_value)
568-
else
569-
query
570+
Enum.reduce(attribute_values, query, fn {attribute, value}, query ->
571+
Ash.Query.filter(query, ^Ash.Expr.ref(attribute) == ^value)
572+
end)
570573
end
571574
else
572575
query

0 commit comments

Comments
 (0)