Update the LiveUserAuth to check the User's role.
This commit is contained in:
@@ -6,6 +6,8 @@ defmodule DecentralisedBookIndexWeb.LiveUserAuth do
|
||||
import Phoenix.Component
|
||||
use DecentralisedBookIndexWeb, :verified_routes
|
||||
|
||||
alias DecentralisedBookIndex.Accounts.Role
|
||||
|
||||
def on_mount(:live_user_optional, _params, _session, socket) do
|
||||
if socket.assigns[:current_user] do
|
||||
{:cont, socket}
|
||||
@@ -29,4 +31,34 @@ defmodule DecentralisedBookIndexWeb.LiveUserAuth do
|
||||
{:cont, assign(socket, :current_user, nil)}
|
||||
end
|
||||
end
|
||||
|
||||
def on_mount(:moderator_required, _params, _session, socket) do
|
||||
current_user = socket.assigns[:current_user]
|
||||
|
||||
if current_user && Role.can_moderate?(current_user.role) do
|
||||
{:cont, socket}
|
||||
else
|
||||
socket =
|
||||
socket
|
||||
|> Phoenix.LiveView.put_flash(:error, "Unauthorized!")
|
||||
|> Phoenix.LiveView.redirect(to: ~p"/")
|
||||
|
||||
{:halt, socket}
|
||||
end
|
||||
end
|
||||
|
||||
def on_mount(:admin_required, _params, _session, socket) do
|
||||
current_user = socket.assigns[:current_user]
|
||||
|
||||
if current_user && Role.can_administrate?(current_user.role) do
|
||||
{:cont, socket}
|
||||
else
|
||||
socket =
|
||||
socket
|
||||
|> Phoenix.LiveView.put_flash(:error, "Unauthorized!")
|
||||
|> Phoenix.LiveView.redirect(to: ~p"/")
|
||||
|
||||
{:halt, socket}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user