diff --git a/lib/mv_web/live/user_live/form.ex b/lib/mv_web/live/user_live/form.ex index 28af7c4..0a286c9 100644 --- a/lib/mv_web/live/user_live/form.ex +++ b/lib/mv_web/live/user_live/form.ex @@ -264,29 +264,27 @@ defmodule MvWeb.UserLive.Form do def mount(params, _session, socket) do actor = current_actor(socket) - user = - case params["id"] do - nil -> - nil + case load_user_or_redirect(params["id"], actor, socket) do + {:redirect, socket} -> + {:ok, socket} - id -> - loaded = - Ash.get!(Mv.Accounts.User, id, domain: Mv.Accounts, load: [:member], actor: actor) + {:ok, user} -> + mount_continue(user, params, socket) + end + end - if to_string(loaded.email) == Mv.Helpers.SystemActor.system_user_email() do - {:redirect, loaded} - else - loaded - end - end + defp load_user_or_redirect(nil, _actor, _socket), do: {:ok, nil} - if match?({:redirect, _}, user) do - {:ok, + defp load_user_or_redirect(id, actor, socket) do + user = Ash.get!(Mv.Accounts.User, id, domain: Mv.Accounts, load: [:member], actor: actor) + + if Mv.Helpers.SystemActor.system_user?(user) do + {:redirect, socket |> put_flash(:error, gettext("This user cannot be edited.")) |> push_navigate(to: ~p"/users")} else - mount_continue(user, params, socket) + {:ok, user} end end diff --git a/lib/mv_web/live/user_live/show.ex b/lib/mv_web/live/user_live/show.ex index fe2dd24..e961d84 100644 --- a/lib/mv_web/live/user_live/show.ex +++ b/lib/mv_web/live/user_live/show.ex @@ -75,7 +75,7 @@ defmodule MvWeb.UserLive.Show do actor = current_actor(socket) user = Ash.get!(Mv.Accounts.User, id, domain: Mv.Accounts, load: [:member], actor: actor) - if to_string(user.email) == Mv.Helpers.SystemActor.system_user_email() do + if Mv.Helpers.SystemActor.system_user?(user) do {:ok, socket |> put_flash(:error, gettext("This user cannot be viewed."))