Delete report notifs when demoting from superuser

When someone isn't a superuser any more, they shouldn't see the reporsts any more either.
Here we delete the report notifications from a user when that user gets updated from being a superuser to a non-superuser.
This commit is contained in:
Ilja 2022-03-06 17:36:30 +01:00
commit 89667189b8
4 changed files with 66 additions and 1 deletions

View file

@ -341,6 +341,14 @@ defmodule Pleroma.Notification do
|> Repo.delete_all()
end
def destroy_multiple_from_types(%{id: user_id}, types) do
from(n in Notification,
where: n.user_id == ^user_id,
where: n.type in ^types
)
|> Repo.delete_all()
end
def dismiss(%Pleroma.Activity{} = activity) do
Notification
|> where([n], n.activity_id == ^activity.id)

View file

@ -1127,10 +1127,27 @@ defmodule Pleroma.User do
|> update_and_set_cache()
end
def update_and_set_cache(changeset) do
def update_and_set_cache(%{data: %Pleroma.User{} = user} = changeset) do
was_superuser_before_update = User.superuser?(user)
with {:ok, user} <- Repo.update(changeset, stale_error_field: :id) do
set_cache(user)
end
|> maybe_remove_report_notifications(was_superuser_before_update)
end
defp maybe_remove_report_notifications(
{:ok, %Pleroma.User{} = user} = result,
was_superuser_before_update
) do
if was_superuser_before_update and not User.superuser?(user),
do: user |> Notification.destroy_multiple_from_types(["pleroma:report"])
result
end
defp maybe_remove_report_notifications(result, _) do
result
end
def get_user_friends_ap_ids(user) do