improvement: properly set tenant from initial data

This commit is contained in:
Zach Daniel 2023-06-06 11:47:13 -04:00
parent 5b6c81d800
commit 85da9eff6f

View file

@ -741,20 +741,38 @@ defmodule Ash.Actions.Read do
pkey_value = pkey_value =
record |> Map.take(Ash.Resource.Info.primary_key(query.resource)) |> Map.to_list() record |> Map.take(Ash.Resource.Info.primary_key(query.resource)) |> Map.to_list()
Ash.Query.filter(query, ^pkey_value) query = Ash.Query.filter(query, ^pkey_value)
if tenant = record.__metadata__[:tenant] do
Ash.Query.set_tenant(query, tenant)
else
query
end
{:ok, %{} = record} -> {:ok, %{} = record} ->
pkey_value = pkey_value =
record |> Map.take(Ash.Resource.Info.primary_key(query.resource)) |> Map.to_list() record |> Map.take(Ash.Resource.Info.primary_key(query.resource)) |> Map.to_list()
Ash.Query.filter(query, ^pkey_value) query = Ash.Query.filter(query, ^pkey_value)
{:ok, records} when is_list(records) -> if tenant = record.__metadata__[:tenant] do
Ash.Query.set_tenant(query, tenant)
else
query
end
{:ok, [record | _] = records} ->
pkey = Ash.Resource.Info.primary_key(query.resource) pkey = Ash.Resource.Info.primary_key(query.resource)
pkey_value = Enum.map(records, fn record -> record |> Map.take(pkey) |> Map.to_list() end) pkey_value = Enum.map(records, fn record -> record |> Map.take(pkey) |> Map.to_list() end)
filter = [or: pkey_value] filter = [or: pkey_value]
Ash.Query.filter(query, ^filter) query = Ash.Query.filter(query, ^filter)
if tenant = record.__metadata__[:tenant] do
Ash.Query.set_tenant(query, tenant)
else
query
end
end end
end end
@ -1501,7 +1519,8 @@ defmodule Ash.Actions.Read do
[ [
actor: request_opts[:actor], actor: request_opts[:actor],
authorize?: authorize?, authorize?: authorize?,
tracer: request_opts[:tracer] tracer: request_opts[:tracer],
tenant: request_opts[:tenant]
], ],
dep, dep,
path, path,