diff --git a/lib/memex_web/live/context_live/index.ex b/lib/memex_web/live/context_live/index.ex
index d4c0666..e9efdaa 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.{Contexts, Contexts.Context}
+ alias Memex.{Accounts.User, Contexts, Contexts.Context}
@impl true
def mount(%{"search" => search}, _session, socket) do
@@ -77,4 +77,13 @@ 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 ab8ae63..4e8bdbb 100644
--- a/lib/memex_web/live/context_live/index.html.heex
+++ b/lib/memex_web/live/context_live/index.html.heex
@@ -30,13 +30,15 @@
contexts={@contexts}
>
<:actions :let={context}>
- <%= if @current_user do %>
+ <%= if is_owner?(context, @current_user) do %>
<.link
patch={Routes.context_index_path(@socket, :edit, context)}
data-qa={"context-edit-#{context.id}"}
>
<%= dgettext("actions", "edit") %>
+ <% end %>
+ <%= if is_owner_or_admin?(context, @current_user) do %>
<.link
href="#"
phx-click="delete"
diff --git a/lib/memex_web/live/context_live/show.ex b/lib/memex_web/live/context_live/show.ex
index 3e3239a..7215374 100644
--- a/lib/memex_web/live/context_live/show.ex
+++ b/lib/memex_web/live/context_live/show.ex
@@ -1,7 +1,7 @@
defmodule MemexWeb.ContextLive.Show do
use MemexWeb, :live_view
- alias Memex.Contexts
+ alias Memex.{Accounts.User, Contexts, Contexts.Context}
@impl true
def mount(_params, _session, socket) do
@@ -38,4 +38,13 @@ defmodule MemexWeb.ContextLive.Show do
defp page_title(:show), do: gettext("show context")
defp page_title(:edit), do: gettext("edit context")
+
+ @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 c1fe16e..716cd07 100644
--- a/lib/memex_web/live/context_live/show.html.heex
+++ b/lib/memex_web/live/context_live/show.html.heex
@@ -19,14 +19,15 @@
- <.link class="btn btn-primary" patch={Routes.context_index_path(@socket, :index)}>
+ <.link class="btn btn-primary" navigate={Routes.context_index_path(@socket, :index)}>
<%= dgettext("actions", "back") %>
- <%= if @current_user do %>
+ <%= if is_owner?(@context, @current_user) do %>
<.link class="btn btn-primary" patch={Routes.context_show_path(@socket, :edit, @context)}>
<%= dgettext("actions", "edit") %>
-
+ <% end %>
+ <%= if is_owner_or_admin?(@context, @current_user) do %>