feat(user_live): handle system user in form and show
Early return / load_user_or_redirect, use system_user? to avoid editing system actor.
This commit is contained in:
parent
a10c770ca7
commit
cbcb93418e
2 changed files with 15 additions and 17 deletions
|
|
@ -264,29 +264,27 @@ defmodule MvWeb.UserLive.Form do
|
||||||
def mount(params, _session, socket) do
|
def mount(params, _session, socket) do
|
||||||
actor = current_actor(socket)
|
actor = current_actor(socket)
|
||||||
|
|
||||||
user =
|
case load_user_or_redirect(params["id"], actor, socket) do
|
||||||
case params["id"] do
|
{:redirect, socket} ->
|
||||||
nil ->
|
{:ok, socket}
|
||||||
nil
|
|
||||||
|
|
||||||
id ->
|
{:ok, user} ->
|
||||||
loaded =
|
mount_continue(user, params, socket)
|
||||||
Ash.get!(Mv.Accounts.User, id, domain: Mv.Accounts, load: [:member], actor: actor)
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if to_string(loaded.email) == Mv.Helpers.SystemActor.system_user_email() do
|
defp load_user_or_redirect(nil, _actor, _socket), do: {:ok, nil}
|
||||||
{:redirect, loaded}
|
|
||||||
else
|
|
||||||
loaded
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if match?({:redirect, _}, user) do
|
defp load_user_or_redirect(id, actor, socket) do
|
||||||
{:ok,
|
user = Ash.get!(Mv.Accounts.User, id, domain: Mv.Accounts, load: [:member], actor: actor)
|
||||||
|
|
||||||
|
if Mv.Helpers.SystemActor.system_user?(user) do
|
||||||
|
{:redirect,
|
||||||
socket
|
socket
|
||||||
|> put_flash(:error, gettext("This user cannot be edited."))
|
|> put_flash(:error, gettext("This user cannot be edited."))
|
||||||
|> push_navigate(to: ~p"/users")}
|
|> push_navigate(to: ~p"/users")}
|
||||||
else
|
else
|
||||||
mount_continue(user, params, socket)
|
{:ok, user}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ defmodule MvWeb.UserLive.Show do
|
||||||
actor = current_actor(socket)
|
actor = current_actor(socket)
|
||||||
user = Ash.get!(Mv.Accounts.User, id, domain: Mv.Accounts, load: [:member], actor: actor)
|
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,
|
{:ok,
|
||||||
socket
|
socket
|
||||||
|> put_flash(:error, gettext("This user cannot be viewed."))
|
|> put_flash(:error, gettext("This user cannot be viewed."))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue