Use current_actor/1 helper in all LiveViews
Replace inconsistent actor access patterns with current_actor/1 helper and ensure actor is passed to all Ash operations for proper authorization.
This commit is contained in:
parent
74fe60f768
commit
cd7e6b0843
9 changed files with 268 additions and 57 deletions
|
|
@ -13,6 +13,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
use MvWeb, :live_component
|
||||
|
||||
require Ash.Query
|
||||
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||
|
||||
alias Mv.Membership
|
||||
alias Mv.MembershipFees
|
||||
|
|
@ -426,7 +427,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
@impl true
|
||||
def handle_event("change_membership_fee_type", %{"value" => ""}, socket) do
|
||||
# Remove membership fee type
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
|
||||
case update_member_fee_type(socket.assigns.member, nil, actor) do
|
||||
{:ok, updated_member} ->
|
||||
|
|
@ -438,7 +439,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
|> assign(:cycles, [])
|
||||
|> assign(
|
||||
:available_fee_types,
|
||||
get_available_fee_types(updated_member, socket.assigns.current_user)
|
||||
get_available_fee_types(updated_member, current_actor(socket))
|
||||
)
|
||||
|> assign(:interval_warning, nil)
|
||||
|> put_flash(:info, gettext("Membership fee type removed"))}
|
||||
|
|
@ -450,7 +451,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
|
||||
def handle_event("change_membership_fee_type", %{"value" => fee_type_id}, socket) do
|
||||
member = socket.assigns.member
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
new_fee_type = Ash.get!(MembershipFeeType, fee_type_id, domain: MembershipFees, actor: actor)
|
||||
|
||||
# Check if interval matches
|
||||
|
|
@ -469,12 +470,12 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
if interval_warning do
|
||||
{:noreply, assign(socket, :interval_warning, interval_warning)}
|
||||
else
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
|
||||
case update_member_fee_type(member, fee_type_id, actor) do
|
||||
{:ok, updated_member} ->
|
||||
# Reload member with cycles
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
|
||||
updated_member =
|
||||
updated_member
|
||||
|
|
@ -501,7 +502,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
|> assign(:cycles, cycles)
|
||||
|> assign(
|
||||
:available_fee_types,
|
||||
get_available_fee_types(updated_member, socket.assigns.current_user)
|
||||
get_available_fee_types(updated_member, current_actor(socket))
|
||||
)
|
||||
|> assign(:interval_warning, nil)
|
||||
|> put_flash(:info, gettext("Membership fee type updated. Cycles regenerated."))}
|
||||
|
|
@ -523,7 +524,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
:suspended -> :mark_as_suspended
|
||||
end
|
||||
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
|
||||
case Ash.update(cycle, action: action, domain: MembershipFees, actor: actor) do
|
||||
{:ok, updated_cycle} ->
|
||||
|
|
@ -555,11 +556,12 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
def handle_event("regenerate_cycles", _params, socket) do
|
||||
socket = assign(socket, :regenerating, true)
|
||||
member = socket.assigns.member
|
||||
actor = current_actor(socket)
|
||||
|
||||
case CycleGenerator.generate_cycles_for_member(member.id) do
|
||||
case CycleGenerator.generate_cycles_for_member(member.id, actor: actor) do
|
||||
{:ok, _new_cycles, _notifications} ->
|
||||
# Reload member with cycles
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
|
||||
updated_member =
|
||||
member
|
||||
|
|
@ -599,7 +601,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
cycle = find_cycle(socket.assigns.cycles, cycle_id)
|
||||
|
||||
# Load cycle with membership_fee_type for display
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
cycle = Ash.load!(cycle, :membership_fee_type, actor: actor)
|
||||
|
||||
{:noreply, assign(socket, :editing_cycle, cycle)}
|
||||
|
|
@ -617,7 +619,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
|
||||
case Decimal.parse(normalized_amount_str) do
|
||||
{amount, _} when is_struct(amount, Decimal) ->
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
|
||||
case cycle
|
||||
|> Ash.Changeset.for_update(:update, %{amount: amount})
|
||||
|
|
@ -646,7 +648,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
cycle = find_cycle(socket.assigns.cycles, cycle_id)
|
||||
|
||||
# Load cycle with membership_fee_type for display
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
cycle = Ash.load!(cycle, :membership_fee_type, actor: actor)
|
||||
|
||||
{:noreply, assign(socket, :deleting_cycle, cycle)}
|
||||
|
|
@ -658,7 +660,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
|
||||
def handle_event("confirm_delete_cycle", %{"cycle_id" => cycle_id}, socket) do
|
||||
cycle = find_cycle(socket.assigns.cycles, cycle_id)
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
|
||||
case Ash.destroy(cycle, domain: MembershipFees, actor: actor) do
|
||||
:ok ->
|
||||
|
|
@ -731,7 +733,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
|
||||
if deleted_count > 0 do
|
||||
# Reload member to get updated cycles
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
|
||||
updated_member =
|
||||
member
|
||||
|
|
@ -823,7 +825,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
|||
membership_fee_type_id: member.membership_fee_type_id
|
||||
}
|
||||
|
||||
actor = socket.assigns.current_user
|
||||
actor = current_actor(socket)
|
||||
|
||||
case Ash.create(MembershipFeeCycle, attrs, domain: MembershipFees, actor: actor) do
|
||||
{:ok, _new_cycle} ->
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue