fix: ensure changeset filters are applied on bulk destroy/update

This commit is contained in:
Zach Daniel 2024-04-16 20:24:06 +01:00
parent fb90709f71
commit 3b8a15fd34
2 changed files with 10 additions and 0 deletions

View file

@ -369,6 +369,7 @@ defmodule Ash.Actions.Destroy.Bulk do
with {:ok, query} <- authorize_bulk_query(query, atomic_changeset, opts),
{:ok, atomic_changeset, query} <-
authorize_atomic_changeset(query, atomic_changeset, opts),
{query, atomic_changeset} <- add_changeset_filters(query, atomic_changeset),
{:ok, data_layer_query} <- Ash.Query.data_layer_query(query) do
case Ash.DataLayer.destroy_query(
data_layer_query,
@ -530,6 +531,10 @@ defmodule Ash.Actions.Destroy.Bulk do
end
end
defp add_changeset_filters(query, changeset) do
{Ash.Query.filter(query, changeset.filter), %{changeset | filter: nil}}
end
defp do_run(domain, stream, action, input, opts, not_atomic_reason) do
resource = opts[:resource]
opts = Ash.Actions.Helpers.set_opts(opts, domain)

View file

@ -337,6 +337,7 @@ defmodule Ash.Actions.Update.Bulk do
authorize_bulk_query(query, atomic_changeset, opts),
{:ok, atomic_changeset, query} <-
authorize_atomic_changeset(query, atomic_changeset, opts),
{query, atomic_changeset} <- add_changeset_filters(query, atomic_changeset),
{:ok, data_layer_query} <- Ash.Query.data_layer_query(query) do
case Ash.DataLayer.update_query(
data_layer_query,
@ -955,6 +956,10 @@ defmodule Ash.Actions.Update.Bulk do
|> Enum.with_index()
end
defp add_changeset_filters(query, changeset) do
{Ash.Query.filter(query, changeset.filter), %{changeset | filter: nil}}
end
defp pre_template(opts, changeset, actor) do
if Ash.Expr.template_references_context?(opts) do
opts