Add ability to delete a group
This commit is contained in:
@@ -242,6 +242,13 @@ defmodule Mobilizon.Actors do
|
||||
|> Repo.insert()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Delete a group
|
||||
"""
|
||||
def delete_group!(%Actor{type: :Group} = group) do
|
||||
Repo.delete!(group)
|
||||
end
|
||||
|
||||
alias Mobilizon.Actors.User
|
||||
|
||||
@doc """
|
||||
@@ -551,6 +558,16 @@ defmodule Mobilizon.Actors do
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Find a group by its actor id
|
||||
"""
|
||||
def find_group_by_actor_id(actor_id) do
|
||||
case Repo.get_by(Actor, id: actor_id, type: :Group) do
|
||||
nil -> {:error, :group_not_found}
|
||||
actor -> {:ok, actor}
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Authenticate user
|
||||
"""
|
||||
|
||||
@@ -6,6 +6,7 @@ defmodule Mobilizon.Actors.Member do
|
||||
import Ecto.Changeset
|
||||
alias Mobilizon.Actors.Member
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Repo
|
||||
|
||||
schema "members" do
|
||||
field(:approved, :boolean, default: true)
|
||||
@@ -24,4 +25,22 @@ defmodule Mobilizon.Actors.Member do
|
||||
|> validate_required([:parent_id, :actor_id])
|
||||
|> unique_constraint(:parent_id, name: :members_actor_parent_unique_index)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a single member of an actor (for example a group)
|
||||
"""
|
||||
def get_member(actor_id, parent_id) do
|
||||
case Repo.get_by(Member, actor_id: actor_id, parent_id: parent_id) do
|
||||
nil -> {:error, :member_not_found}
|
||||
member -> {:ok, member}
|
||||
end
|
||||
end
|
||||
|
||||
def is_administrator(%Member{role: 2} = member) do
|
||||
{:is_admin, true}
|
||||
end
|
||||
|
||||
def is_administrator(%Member{}) do
|
||||
{:is_admin, false}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -144,4 +144,16 @@ defmodule Mobilizon.Actors.User do
|
||||
def is_confirmed(%User{} = user) do
|
||||
{:ok, user}
|
||||
end
|
||||
|
||||
def owns_actor(%User{default_actor_id: default_actor_id} = user, %Actor{id: actor_id})
|
||||
when default_actor_id == actor_id do
|
||||
{:is_owned, true}
|
||||
end
|
||||
|
||||
def owns_actor(%User{actors: actors} = user, actor_id) do
|
||||
case Enum.any?(actors, fn a -> a.id == actor_id end) do
|
||||
true -> {:is_owned, true}
|
||||
_ -> {:is_owned, false}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user