refactor(web): extract shared current_actor controller helper
This commit is contained in:
parent
561779e704
commit
1adf6aa664
4 changed files with 28 additions and 20 deletions
22
lib/mv_web/controllers/controller_helpers.ex
Normal file
22
lib/mv_web/controllers/controller_helpers.ex
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
defmodule MvWeb.ControllerHelpers do
|
||||
@moduledoc """
|
||||
Shared helpers for plug-based controllers.
|
||||
|
||||
The LiveView equivalent lives in `MvWeb.LiveHelpers`; this module is the
|
||||
controller-side counterpart that works on a `Plug.Conn`.
|
||||
"""
|
||||
|
||||
alias Mv.Authorization.Actor
|
||||
|
||||
@doc """
|
||||
Returns the request actor for a controller, loaded for authorization.
|
||||
|
||||
Reads `:current_user` from the connection assigns and ensures it is loaded via
|
||||
`Mv.Authorization.Actor.ensure_loaded/1`.
|
||||
"""
|
||||
@spec current_actor(Plug.Conn.t()) :: Mv.Accounts.User.t() | nil
|
||||
def current_actor(conn) do
|
||||
conn.assigns[:current_user]
|
||||
|> Actor.ensure_loaded()
|
||||
end
|
||||
end
|
||||
|
|
@ -13,11 +13,12 @@ defmodule MvWeb.ImportTemplateController do
|
|||
"""
|
||||
use MvWeb, :controller
|
||||
|
||||
alias Mv.Authorization.Actor
|
||||
alias Mv.Membership.Member
|
||||
alias Mv.Membership.MembersCSV
|
||||
alias MvWeb.Authorization
|
||||
|
||||
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
||||
|
||||
# Standard member columns in template order, with their English and German headers
|
||||
# and a placeholder example value. Groups and fee type are importable extras.
|
||||
@columns [
|
||||
|
|
@ -105,11 +106,6 @@ defmodule MvWeb.ImportTemplateController do
|
|||
end
|
||||
end
|
||||
|
||||
defp current_actor(conn) do
|
||||
conn.assigns[:current_user]
|
||||
|> Actor.ensure_loaded()
|
||||
end
|
||||
|
||||
defp return_forbidden(conn) do
|
||||
conn
|
||||
|> put_status(403)
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ defmodule MvWeb.MemberExportController do
|
|||
require Ash.Query
|
||||
import Ash.Expr
|
||||
|
||||
alias Mv.Authorization.Actor
|
||||
alias Mv.Membership.CustomField
|
||||
alias Mv.Membership.CustomFieldSort
|
||||
alias Mv.Membership.Member
|
||||
|
|
@ -18,6 +17,8 @@ defmodule MvWeb.MemberExportController do
|
|||
alias Mv.Membership.MembersCSV
|
||||
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
||||
alias MvWeb.Translations.MemberFields
|
||||
|
||||
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
||||
use Gettext, backend: MvWeb.Gettext
|
||||
|
||||
@member_fields_allowlist (Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1)) ++
|
||||
|
|
@ -53,11 +54,6 @@ defmodule MvWeb.MemberExportController do
|
|||
|> json(%{error: message})
|
||||
end
|
||||
|
||||
defp current_actor(conn) do
|
||||
conn.assigns[:current_user]
|
||||
|> Actor.ensure_loaded()
|
||||
end
|
||||
|
||||
defp return_forbidden(conn) do
|
||||
conn
|
||||
|> put_status(403)
|
||||
|
|
|
|||
|
|
@ -10,10 +10,11 @@ defmodule MvWeb.MemberPdfExportController do
|
|||
|
||||
require Logger
|
||||
|
||||
alias Mv.Authorization.Actor
|
||||
alias Mv.Membership.{MemberExport, MemberExport.Build, MembersPDF}
|
||||
alias MvWeb.Translations.MemberFields
|
||||
|
||||
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
||||
|
||||
use Gettext, backend: MvWeb.Gettext
|
||||
|
||||
@payload_required_message "payload required"
|
||||
|
|
@ -79,13 +80,6 @@ defmodule MvWeb.MemberPdfExportController do
|
|||
bad_request(conn, @payload_required_message)
|
||||
end
|
||||
|
||||
# --- Actor / auth ---
|
||||
|
||||
defp current_actor(conn) do
|
||||
conn.assigns[:current_user]
|
||||
|> Actor.ensure_loaded()
|
||||
end
|
||||
|
||||
defp forbidden(conn) do
|
||||
conn
|
||||
|> put_status(:forbidden)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue