fix: add actor and domain parameters to user count functions in Show
Add actor and domain parameters to recalculate_user_count and load_user_count to ensure consistent authorization. Clarify that load_user_count is for initial display while recalculate_user_count is for fresh count before deletion.
This commit is contained in:
parent
548bad6703
commit
d9dd936ae3
1 changed files with 13 additions and 8 deletions
|
|
@ -28,7 +28,7 @@ defmodule MvWeb.RoleLive.Show do
|
|||
actor: socket.assigns[:current_user]
|
||||
) do
|
||||
{:ok, role} ->
|
||||
user_count = load_user_count(role)
|
||||
user_count = load_user_count(role, socket.assigns[:current_user])
|
||||
|
||||
{:ok,
|
||||
socket
|
||||
|
|
@ -99,7 +99,7 @@ defmodule MvWeb.RoleLive.Show do
|
|||
gettext("System roles cannot be deleted.")
|
||||
)}
|
||||
else
|
||||
user_count = recalculate_user_count(role)
|
||||
user_count = recalculate_user_count(role, socket.assigns.current_user)
|
||||
|
||||
if user_count > 0 do
|
||||
{:noreply,
|
||||
|
|
@ -137,15 +137,20 @@ defmodule MvWeb.RoleLive.Show do
|
|||
end
|
||||
end
|
||||
|
||||
defp recalculate_user_count(role) do
|
||||
case Ash.count(Accounts.User |> Ash.Query.filter(role_id == ^role.id)) do
|
||||
# Recalculates user count for a specific role (used before deletion)
|
||||
defp recalculate_user_count(role, actor) do
|
||||
opts = [domain: Mv.Accounts]
|
||||
opts = if actor, do: Keyword.put(opts, :actor, actor), else: opts
|
||||
|
||||
case Ash.count(Accounts.User |> Ash.Query.filter(role_id == ^role.id), opts) do
|
||||
{:ok, count} -> count
|
||||
_ -> 0
|
||||
end
|
||||
end
|
||||
|
||||
defp load_user_count(role) do
|
||||
recalculate_user_count(role)
|
||||
# Loads user count for initial display (uses same logic as recalculate)
|
||||
defp load_user_count(role, actor) do
|
||||
recalculate_user_count(role, actor)
|
||||
end
|
||||
|
||||
@impl true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue