diff --git a/lib/mv/accounts/user/validations/email_not_used_by_other_member.ex b/lib/mv/accounts/user/validations/email_not_used_by_other_member.ex index af68f96..8c28af6 100644 --- a/lib/mv/accounts/user/validations/email_not_used_by_other_member.ex +++ b/lib/mv/accounts/user/validations/email_not_used_by_other_member.ex @@ -73,12 +73,18 @@ defmodule Mv.Accounts.User.Validations.EmailNotUsedByOtherMember do end defp check_email_uniqueness(email, exclude_member_id) do + alias Mv.Helpers + alias Mv.Helpers.SystemActor + query = Mv.Membership.Member |> Ash.Query.filter(email == ^to_string(email)) |> maybe_exclude_id(exclude_member_id) - case Ash.read(query) do + system_actor = SystemActor.get_system_actor() + opts = Helpers.ash_actor_opts(system_actor) + + case Ash.read(query, opts) do {:ok, []} -> :ok diff --git a/lib/mv/membership/member/validations/email_not_used_by_other_user.ex b/lib/mv/membership/member/validations/email_not_used_by_other_user.ex index e1bbc4e..3e6ae58 100644 --- a/lib/mv/membership/member/validations/email_not_used_by_other_user.ex +++ b/lib/mv/membership/member/validations/email_not_used_by_other_user.ex @@ -30,8 +30,7 @@ defmodule Mv.Membership.Member.Validations.EmailNotUsedByOtherUser do def validate(changeset, _opts, _context) do email_changing? = Ash.Changeset.changing_attribute?(changeset, :email) - actor = Map.get(changeset.context || %{}, :actor) - linked_user_id = get_linked_user_id(changeset.data, actor) + linked_user_id = get_linked_user_id(changeset.data) is_linked? = not is_nil(linked_user_id) # Only validate if member is already linked AND email is changing @@ -40,19 +39,22 @@ defmodule Mv.Membership.Member.Validations.EmailNotUsedByOtherUser do if should_validate? do new_email = Ash.Changeset.get_attribute(changeset, :email) - check_email_uniqueness(new_email, linked_user_id, actor) + check_email_uniqueness(new_email, linked_user_id) else :ok end end - defp check_email_uniqueness(email, exclude_user_id, actor) do + defp check_email_uniqueness(email, exclude_user_id) do + alias Mv.Helpers.SystemActor + query = Mv.Accounts.User |> Ash.Query.filter(email == ^email) |> maybe_exclude_id(exclude_user_id) - opts = Helpers.ash_actor_opts(actor) + system_actor = SystemActor.get_system_actor() + opts = Helpers.ash_actor_opts(system_actor) case Ash.read(query, opts) do {:ok, []} -> @@ -69,8 +71,11 @@ defmodule Mv.Membership.Member.Validations.EmailNotUsedByOtherUser do defp maybe_exclude_id(query, nil), do: query defp maybe_exclude_id(query, id), do: Ash.Query.filter(query, id != ^id) - defp get_linked_user_id(member_data, actor) do - opts = Helpers.ash_actor_opts(actor) + defp get_linked_user_id(member_data) do + alias Mv.Helpers.SystemActor + + system_actor = SystemActor.get_system_actor() + opts = Helpers.ash_actor_opts(system_actor) case Ash.load(member_data, :user, opts) do {:ok, %{user: %{id: id}}} -> id