Add centralized Actor.ensure_loaded helper
Consolidate role loading logic from HasPermission and LiveHelpers. Use Ash.Resource.Info.resource? for reliable Ash detection.
This commit is contained in:
parent
05c71132e4
commit
f2def20fce
4 changed files with 181 additions and 51 deletions
|
|
@ -391,29 +391,8 @@ defmodule Mv.Authorization.Checks.HasPermission do
|
|||
end
|
||||
|
||||
# Fallback: Load role if not loaded (in case on_mount didn't run)
|
||||
defp ensure_role_loaded(%{role: %Ash.NotLoaded{}} = actor) do
|
||||
if ash_resource?(actor) do
|
||||
load_role_for_actor(actor)
|
||||
else
|
||||
# Not an Ash resource (plain map), return as-is
|
||||
actor
|
||||
end
|
||||
end
|
||||
|
||||
defp ensure_role_loaded(actor), do: actor
|
||||
|
||||
# Check if actor is a valid Ash resource
|
||||
defp ash_resource?(actor) do
|
||||
is_map(actor) and Map.has_key?(actor, :__struct__) and
|
||||
function_exported?(actor.__struct__, :__ash_resource__, 0)
|
||||
end
|
||||
|
||||
# Attempt to load role for Ash resource
|
||||
defp load_role_for_actor(actor) do
|
||||
case Ash.load(actor, :role, domain: Mv.Accounts, actor: actor) do
|
||||
{:ok, loaded} -> loaded
|
||||
# Return original if loading fails
|
||||
{:error, _} -> actor
|
||||
end
|
||||
# Delegates to centralized Actor helper
|
||||
defp ensure_role_loaded(actor) do
|
||||
Mv.Authorization.Actor.ensure_loaded(actor)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue