diff --git a/lib/mv_web/live/role_live/index.ex b/lib/mv_web/live/role_live/index.ex index e23972f..879f236 100644 --- a/lib/mv_web/live/role_live/index.ex +++ b/lib/mv_web/live/role_live/index.ex @@ -20,35 +20,7 @@ defmodule MvWeb.RoleLive.Index do @impl true def mount(_params, _session, socket) do - # Ensure current_user has role loaded for authorization checks - socket = - if socket.assigns[:current_user] do - user = socket.assigns.current_user - - # Load role if not already loaded (check for Ash.NotLoaded struct) - user_with_role = - case Map.get(user, :role) do - %Ash.NotLoaded{} -> - case Ash.load(user, :role, domain: Mv.Accounts) do - {:ok, loaded_user} -> loaded_user - {:error, _} -> user - end - - nil -> - case Ash.load(user, :role, domain: Mv.Accounts) do - {:ok, loaded_user} -> loaded_user - {:error, _} -> user - end - - role when not is_nil(role) -> - user - end - - assign(socket, :current_user, user_with_role) - else - socket - end - + socket = ensure_user_role_loaded(socket) roles = load_roles() {:ok, @@ -57,6 +29,31 @@ defmodule MvWeb.RoleLive.Index do |> assign(:roles, roles)} end + defp ensure_user_role_loaded(socket) do + if socket.assigns[:current_user] do + user = socket.assigns.current_user + user_with_role = load_user_role(user) + assign(socket, :current_user, user_with_role) + else + socket + end + end + + defp load_user_role(user) do + case Map.get(user, :role) do + %Ash.NotLoaded{} -> load_role_safely(user) + nil -> load_role_safely(user) + _role -> user + end + end + + defp load_role_safely(user) do + case Ash.load(user, :role, domain: Mv.Accounts) do + {:ok, loaded_user} -> loaded_user + {:error, _} -> user + end + end + @impl true def handle_event("delete", %{"id" => id}, socket) do {:ok, role} = Authorization.get_role(id)