spazio-solazzo/lib/spazio_solazzo_web/live_user_auth.ex
Víctor Martínez bbc2f08215
feat: build an admin dashboard (#11)
* refactor: update button colors

* feat: add dashboard panel for admins only & update header styles
2026-02-01 19:30:58 +01:00

49 lines
1.4 KiB
Elixir

defmodule SpazioSolazzoWeb.LiveUserAuth do
@moduledoc """
Helpers for authenticating users in LiveViews.
"""
import Phoenix.Component
use SpazioSolazzoWeb, :verified_routes
# This is used for nested liveviews to fetch the current user.
# To use, place the following at the top of that liveview:
# on_mount {SpazioSolazzoWeb.LiveUserAuth, :current_user}
def on_mount(:current_user, _params, session, socket) do
{:cont, AshAuthentication.Phoenix.LiveSession.assign_new_resources(socket, session)}
end
def on_mount(:live_user_optional, _params, _session, socket) do
if socket.assigns[:current_user] do
{:cont, socket}
else
{:cont, assign(socket, :current_user, nil)}
end
end
def on_mount(:live_user_required, _params, _session, socket) do
if socket.assigns[:current_user] do
{:cont, socket}
else
{:halt, Phoenix.LiveView.redirect(socket, to: ~p"/sign-in")}
end
end
def on_mount(:live_no_user, _params, _session, socket) do
if socket.assigns[:current_user] do
{:halt, Phoenix.LiveView.redirect(socket, to: ~p"/")}
else
{:cont, assign(socket, :current_user, nil)}
end
end
def on_mount(:live_admin_required, _params, _session, socket) do
case socket.assigns[:current_user] do
%{is_admin: true} ->
{:cont, socket}
_ ->
{:halt, Phoenix.LiveView.redirect(socket, to: ~p"/")}
end
end
end