Pass actor parameter through email sync operations
Extract actor from changeset context and pass it to all email sync loader functions to ensure proper authorization when loading linked users and members.
This commit is contained in:
parent
dbd79075f5
commit
5ffd2b334e
3 changed files with 44 additions and 15 deletions
|
|
@ -6,11 +6,16 @@ defmodule Mv.EmailSync.Loader do
|
|||
|
||||
@doc """
|
||||
Loads the member linked to a user, returns nil if not linked or on error.
|
||||
"""
|
||||
def get_linked_member(%{member_id: nil}), do: nil
|
||||
|
||||
def get_linked_member(%{member_id: id}) do
|
||||
case Ash.get(Mv.Membership.Member, id) do
|
||||
Accepts optional actor for authorization.
|
||||
"""
|
||||
def get_linked_member(user, actor \\ nil)
|
||||
def get_linked_member(%{member_id: nil}, _actor), do: nil
|
||||
|
||||
def get_linked_member(%{member_id: id}, actor) do
|
||||
opts = if actor, do: [actor: actor], else: []
|
||||
|
||||
case Ash.get(Mv.Membership.Member, id, opts) do
|
||||
{:ok, member} -> member
|
||||
{:error, _} -> nil
|
||||
end
|
||||
|
|
@ -18,9 +23,13 @@ defmodule Mv.EmailSync.Loader do
|
|||
|
||||
@doc """
|
||||
Loads the user linked to a member, returns nil if not linked or on error.
|
||||
|
||||
Accepts optional actor for authorization.
|
||||
"""
|
||||
def get_linked_user(member) do
|
||||
case Ash.load(member, :user) do
|
||||
def get_linked_user(member, actor \\ nil) do
|
||||
opts = if actor, do: [actor: actor], else: []
|
||||
|
||||
case Ash.load(member, :user, opts) do
|
||||
{:ok, %{user: user}} -> user
|
||||
{:error, _} -> nil
|
||||
end
|
||||
|
|
@ -29,9 +38,13 @@ defmodule Mv.EmailSync.Loader do
|
|||
@doc """
|
||||
Loads the user linked to a member, returning an error tuple if not linked.
|
||||
Useful when a link is required for the operation.
|
||||
|
||||
Accepts optional actor for authorization.
|
||||
"""
|
||||
def load_linked_user!(member) do
|
||||
case Ash.load(member, :user) do
|
||||
def load_linked_user!(member, actor \\ nil) do
|
||||
opts = if actor, do: [actor: actor], else: []
|
||||
|
||||
case Ash.load(member, :user, opts) do
|
||||
{:ok, %{user: user}} when not is_nil(user) -> {:ok, user}
|
||||
{:ok, _} -> {:error, :no_linked_user}
|
||||
{:error, _} = error -> error
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue