diff --git a/lib/memex/contexts.ex b/lib/memex/contexts.ex index 943be61..2b800b5 100644 --- a/lib/memex/contexts.ex +++ b/lib/memex/contexts.ex @@ -228,4 +228,13 @@ defmodule Memex.Contexts do def change_context(%Context{} = context, attrs \\ %{}, user) do context |> Context.update_changeset(attrs, user) end + + @spec is_owner_or_admin?(Context.t(), User.t()) :: boolean() + def is_owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true + def is_owner_or_admin?(_context, %{role: :admin}), do: true + def is_owner_or_admin?(_context, _other_user), do: false + + @spec is_owner?(Context.t(), User.t()) :: boolean() + def is_owner?(%{user_id: user_id}, %{id: user_id}), do: true + def is_owner?(_context, _other_user), do: false end diff --git a/lib/memex/notes.ex b/lib/memex/notes.ex index d1e8567..c8c07eb 100644 --- a/lib/memex/notes.ex +++ b/lib/memex/notes.ex @@ -228,4 +228,13 @@ defmodule Memex.Notes do def change_note(%Note{} = note, attrs \\ %{}, user) do note |> Note.update_changeset(attrs, user) end + + @spec is_owner_or_admin?(Note.t(), User.t()) :: boolean() + def is_owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true + def is_owner_or_admin?(_context, %{role: :admin}), do: true + def is_owner_or_admin?(_context, _other_user), do: false + + @spec is_owner?(Note.t(), User.t()) :: boolean() + def is_owner?(%{user_id: user_id}, %{id: user_id}), do: true + def is_owner?(_context, _other_user), do: false end diff --git a/lib/memex/pipelines.ex b/lib/memex/pipelines.ex index 6e6f541..988933c 100644 --- a/lib/memex/pipelines.ex +++ b/lib/memex/pipelines.ex @@ -230,4 +230,13 @@ defmodule Memex.Pipelines do def change_pipeline(%Pipeline{} = pipeline, attrs \\ %{}, user) do pipeline |> Pipeline.update_changeset(attrs, user) end + + @spec is_owner_or_admin?(Pipeline.t(), User.t()) :: boolean() + def is_owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true + def is_owner_or_admin?(_context, %{role: :admin}), do: true + def is_owner_or_admin?(_context, _other_user), do: false + + @spec is_owner?(Pipeline.t(), User.t()) :: boolean() + def is_owner?(%{user_id: user_id}, %{id: user_id}), do: true + def is_owner?(_context, _other_user), do: false end diff --git a/lib/memex_web/live/context_live/index.ex b/lib/memex_web/live/context_live/index.ex index 21b3ff5..6a97552 100644 --- a/lib/memex_web/live/context_live/index.ex +++ b/lib/memex_web/live/context_live/index.ex @@ -1,6 +1,6 @@ defmodule MemexWeb.ContextLive.Index do use MemexWeb, :live_view - alias Memex.{Accounts.User, Contexts, Contexts.Context} + alias Memex.{Contexts, Contexts.Context} @impl true def mount(%{"search" => search}, _session, socket) do @@ -76,13 +76,4 @@ defmodule MemexWeb.ContextLive.Index do defp display_contexts(%{assigns: %{search: search}} = socket) do socket |> assign(contexts: Contexts.list_public_contexts(search)) end - - @spec is_owner_or_admin?(Context.t(), User.t()) :: boolean() - defp is_owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true - defp is_owner_or_admin?(_context, %{role: :admin}), do: true - defp is_owner_or_admin?(_context, _other_user), do: false - - @spec is_owner?(Context.t(), User.t()) :: boolean() - defp is_owner?(%{user_id: user_id}, %{id: user_id}), do: true - defp is_owner?(_context, _other_user), do: false end diff --git a/lib/memex_web/live/context_live/index.html.heex b/lib/memex_web/live/context_live/index.html.heex index ca9b866..73a4ad8 100644 --- a/lib/memex_web/live/context_live/index.html.heex +++ b/lib/memex_web/live/context_live/index.html.heex @@ -32,14 +32,14 @@ > <:actions :let={context}> <.link - :if={is_owner?(context, @current_user)} + :if={Contexts.is_owner?(context, @current_user)} patch={Routes.context_index_path(@socket, :edit, context.slug)} aria-label={dgettext("actions", "edit %{context_slug}", context_slug: context.slug)} > <%= dgettext("actions", "edit") %> <.link - :if={is_owner_or_admin?(context, @current_user)} + :if={Contexts.is_owner_or_admin?(context, @current_user)} href="#" phx-click="delete" phx-value-id={context.id} diff --git a/lib/memex_web/live/context_live/show.ex b/lib/memex_web/live/context_live/show.ex index e2d557b..4da65a3 100644 --- a/lib/memex_web/live/context_live/show.ex +++ b/lib/memex_web/live/context_live/show.ex @@ -1,6 +1,6 @@ defmodule MemexWeb.ContextLive.Show do use MemexWeb, :live_view - alias Memex.{Accounts.User, Contexts, Contexts.Context} + alias Memex.Contexts @impl true def mount(_params, _session, socket) do @@ -45,13 +45,4 @@ defmodule MemexWeb.ContextLive.Show do defp page_title(:show, %{slug: slug}), do: slug defp page_title(:edit, %{slug: slug}), do: gettext("edit %{slug}", slug: slug) - - @spec is_owner_or_admin?(Context.t(), User.t()) :: boolean() - defp is_owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true - defp is_owner_or_admin?(_context, %{role: :admin}), do: true - defp is_owner_or_admin?(_context, _other_user), do: false - - @spec is_owner?(Context.t(), User.t()) :: boolean() - defp is_owner?(%{user_id: user_id}, %{id: user_id}), do: true - defp is_owner?(_context, _other_user), do: false end diff --git a/lib/memex_web/live/context_live/show.html.heex b/lib/memex_web/live/context_live/show.html.heex index 502c4a5..10045c1 100644 --- a/lib/memex_web/live/context_live/show.html.heex +++ b/lib/memex_web/live/context_live/show.html.heex @@ -24,14 +24,14 @@ <%= dgettext("actions", "back") %> <.link - :if={is_owner?(@context, @current_user)} + :if={Contexts.is_owner?(@context, @current_user)} class="btn btn-primary" patch={Routes.context_show_path(@socket, :edit, @context.slug)} > <%= dgettext("actions", "edit") %>