Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
mayel committed Nov 23, 2024
1 parent 42a180a commit 1c921ad
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 39 deletions.
3 changes: 1 addition & 2 deletions lib/config_settings/env_config.ex
Original file line number Diff line number Diff line change
Expand Up @@ -237,5 +237,4 @@ defmodule Bonfire.Common.EnvConfig do
do: Keyword.put(opts, :type, type)

defp prepare_want_map_schema(v), do: v

end
end
72 changes: 36 additions & 36 deletions lib/repo/delete.ex
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ defmodule Bonfire.Common.Repo.Delete do
iex> soft_delete(non_existent_entry)
{:error, :deletion_error}
"""
def soft_delete(it), do: deletion_result(do_soft_delete(it))
def soft_delete(it), do: do_soft_delete(it) |> deletion_result()

@spec soft_delete!(any()) :: any()
@doc """
Expand All @@ -33,7 +33,7 @@ defmodule Bonfire.Common.Repo.Delete do
iex> soft_delete!(non_existent_entry)
** (RuntimeError) :deletion_error
"""
def soft_delete!(it), do: deletion_result!(do_soft_delete(it))
def soft_delete!(it), do: do_soft_delete(it) |> deletion_result!()

@doc """
Marks an entry as not deleted.
Expand Down Expand Up @@ -149,40 +149,40 @@ defmodule Bonfire.Common.Repo.Delete do
** (RuntimeError) :deletion_error
"""
def hard_delete!(it),
do: deletion_result!(hard_delete(it))

# FIXME: boilerplate code, or should this be removed in favour of checking authorisation in contexts?
def maybe_allow_delete?(user, context) do
Map.get(Map.get(user, :local_user, %{}), :is_instance_admin) or
maybe_creator_allow_delete?(user, context)
end

defp maybe_creator_allow_delete?(%{id: user_id}, %{creator_id: creator_id})
when not is_nil(creator_id) and not is_nil(user_id) do
creator_id == user_id
end

defp maybe_creator_allow_delete?(%{id: user_id}, %{
profile: %{creator_id: creator_id}
})
when not is_nil(creator_id) and not is_nil(user_id) do
creator_id == user_id
end

defp maybe_creator_allow_delete?(%{id: user_id}, %{
character: %{creator_id: creator_id}
})
when not is_nil(creator_id) and not is_nil(user_id) do
creator_id == user_id
end

# allow to delete self
defp maybe_creator_allow_delete?(%{id: user_id}, %{id: id})
when not is_nil(id) and not is_nil(user_id) do
id == user_id
end

defp maybe_creator_allow_delete?(_, _), do: false
do: hard_delete(it) |> deletion_result!()

# TODO: boilerplate code, or should this be removed in favour of checking authorisation in contexts? also it should use boundaries
# def maybe_allow_delete?(user, object) do
# Map.get(Map.get(user, :local_user, %{}), :is_instance_admin) or
# maybe_creator_allow_delete?(user, object)
# end

# defp maybe_creator_allow_delete?(%{id: user_id}, %{creator_id: creator_id})
# when not is_nil(creator_id) and not is_nil(user_id) do
# creator_id == user_id
# end

# defp maybe_creator_allow_delete?(%{id: user_id}, %{
# profile: %{creator_id: creator_id}
# })
# when not is_nil(creator_id) and not is_nil(user_id) do
# creator_id == user_id
# end

# defp maybe_creator_allow_delete?(%{id: user_id}, %{
# character: %{creator_id: creator_id}
# })
# when not is_nil(creator_id) and not is_nil(user_id) do
# creator_id == user_id
# end

# # allow to delete self
# defp maybe_creator_allow_delete?(%{id: user_id}, %{id: id})
# when not is_nil(id) and not is_nil(user_id) do
# id == user_id
# end

# defp maybe_creator_allow_delete?(_, _), do: false

def deletion_result({:error, e}) do
if module = maybe_module(Bonfire.Fail) do
Expand Down
2 changes: 1 addition & 1 deletion test/common/doctests/config_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ defmodule Bonfire.Common.ConfigTest do
doctest Bonfire.Common.Settings, import: true

alias Bonfire.Common.EnvConfig
doctest Bonfire.Common.EnvConfig, import: false
doctest Bonfire.Common.EnvConfig, import: false
end

0 comments on commit 1c921ad

Please sign in to comment.