move is_owner? and is_owner_or_admin? to context methods

This commit is contained in:
shibao 2023-03-18 23:09:36 -04:00
parent a0d3fb09f3
commit 50b7f8f9b6
18 changed files with 62 additions and 90 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>
<.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}

View File

@ -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

View File

@ -24,14 +24,14 @@
<%= dgettext("actions", "back") %>
</.link>
<.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") %>
</.link>
<button
:if={is_owner_or_admin?(@context, @current_user)}
:if={Contexts.is_owner_or_admin?(@context, @current_user)}
type="button"
class="btn btn-primary"
phx-click="delete"

View File

@ -1,6 +1,6 @@
defmodule MemexWeb.NoteLive.Index do
use MemexWeb, :live_view
alias Memex.{Accounts.User, Notes, Notes.Note}
alias Memex.{Notes, Notes.Note}
@impl true
def mount(%{"search" => search}, _session, socket) do
@ -75,13 +75,4 @@ defmodule MemexWeb.NoteLive.Index do
defp display_notes(%{assigns: %{search: search}} = socket) do
socket |> assign(notes: Notes.list_public_notes(search))
end
@spec is_owner_or_admin?(Note.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?(Note.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

View File

@ -32,14 +32,14 @@
>
<:actions :let={note}>
<.link
:if={is_owner?(note, @current_user)}
:if={Notes.is_owner?(note, @current_user)}
patch={Routes.note_index_path(@socket, :edit, note.slug)}
aria-label={dgettext("actions", "edit %{note_slug}", note_slug: note.slug)}
>
<%= dgettext("actions", "edit") %>
</.link>
<.link
:if={is_owner_or_admin?(note, @current_user)}
:if={Notes.is_owner_or_admin?(note, @current_user)}
href="#"
phx-click="delete"
phx-value-id={note.id}

View File

@ -1,6 +1,6 @@
defmodule MemexWeb.NoteLive.Show do
use MemexWeb, :live_view
alias Memex.{Accounts.User, Notes, Notes.Note}
alias Memex.Notes
@impl true
def mount(_params, _session, socket) do
@ -45,13 +45,4 @@ defmodule MemexWeb.NoteLive.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?(Note.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?(Note.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

View File

@ -24,14 +24,14 @@
<%= dgettext("actions", "back") %>
</.link>
<.link
:if={is_owner?(@note, @current_user)}
:if={Notes.is_owner?(@note, @current_user)}
class="btn btn-primary"
patch={Routes.note_show_path(@socket, :edit, @note.slug)}
>
<%= dgettext("actions", "edit") %>
</.link>
<button
:if={is_owner_or_admin?(@note, @current_user)}
:if={Notes.is_owner_or_admin?(@note, @current_user)}
type="button"
class="btn btn-primary"
phx-click="delete"

View File

@ -1,6 +1,6 @@
defmodule MemexWeb.PipelineLive.Index do
use MemexWeb, :live_view
alias Memex.{Accounts.User, Pipelines, Pipelines.Pipeline}
alias Memex.{Pipelines, Pipelines.Pipeline}
@impl true
def mount(%{"search" => search}, _session, socket) do
@ -76,13 +76,4 @@ defmodule MemexWeb.PipelineLive.Index do
defp display_pipelines(%{assigns: %{search: search}} = socket) do
socket |> assign(pipelines: Pipelines.list_public_pipelines(search))
end
@spec is_owner_or_admin?(Pipeline.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?(Pipeline.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

View File

@ -32,14 +32,14 @@
>
<:actions :let={pipeline}>
<.link
:if={is_owner?(pipeline, @current_user)}
:if={Pipelines.is_owner?(pipeline, @current_user)}
patch={Routes.pipeline_index_path(@socket, :edit, pipeline.slug)}
aria-label={dgettext("actions", "edit %{pipeline_slug}", pipeline_slug: pipeline.slug)}
>
<%= dgettext("actions", "edit") %>
</.link>
<.link
:if={is_owner_or_admin?(pipeline, @current_user)}
:if={Pipelines.is_owner_or_admin?(pipeline, @current_user)}
href="#"
phx-click="delete"
phx-value-id={pipeline.id}

View File

@ -1,7 +1,6 @@
defmodule MemexWeb.PipelineLive.Show do
use MemexWeb, :live_view
alias Memex.{Accounts.User, Pipelines}
alias Memex.Pipelines.{Pipeline, Steps, Steps.Step}
alias Memex.{Pipelines, Pipelines.Steps, Pipelines.Steps.Step}
@impl true
def mount(_params, _session, socket) do
@ -122,13 +121,4 @@ defmodule MemexWeb.PipelineLive.Show do
do: gettext("edit %{slug}", slug: slug)
defp page_title(:add_step, %{slug: slug}), do: gettext("add step to %{slug}", slug: slug)
@spec is_owner_or_admin?(Pipeline.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?(Pipeline.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

View File

@ -32,14 +32,14 @@
<%= dgettext("actions", "back") %>
</.link>
<.link
:if={is_owner?(@pipeline, @current_user)}
:if={Pipelines.is_owner?(@pipeline, @current_user)}
class="btn btn-primary"
patch={Routes.pipeline_show_path(@socket, :edit, @pipeline.slug)}
>
<%= dgettext("actions", "edit") %>
</.link>
<button
:if={is_owner_or_admin?(@pipeline, @current_user)}
:if={Pipelines.is_owner_or_admin?(@pipeline, @current_user)}
type="button"
class="btn btn-primary"
phx-click="delete"
@ -67,7 +67,7 @@
<%= gettext("%{position}. %{title}", position: position + 1, title: title) %>
</h3>
<%= if is_owner?(@pipeline, @current_user) do %>
<%= if Pipelines.is_owner?(@pipeline, @current_user) do %>
<div class="flex justify-between items-center space-x-4">
<%= if position <= 0 do %>
<i class="fas text-xl fa-chevron-up cursor-not-allowed opacity-25"></i>
@ -128,7 +128,7 @@
<% end %>
<.link
:if={is_owner?(@pipeline, @current_user)}
:if={Pipelines.is_owner?(@pipeline, @current_user)}
class="self-end btn btn-primary"
patch={Routes.pipeline_show_path(@socket, :add_step, @pipeline.slug)}
>

View File

@ -364,7 +364,7 @@ msgstr ""
#: lib/memex_web/live/note_live/index.ex:57
#: lib/memex_web/live/note_live/show.ex:40
#: lib/memex_web/live/pipeline_live/index.ex:57
#: lib/memex_web/live/pipeline_live/show.ex:76
#: lib/memex_web/live/pipeline_live/show.ex:75
#, elixir-autogen, elixir-format
msgid "%{slug} deleted"
msgstr ""
@ -381,7 +381,7 @@ msgstr ""
#: lib/memex_web/live/note_live/index.ex:23
#: lib/memex_web/live/note_live/show.ex:47
#: lib/memex_web/live/pipeline_live/index.ex:23
#: lib/memex_web/live/pipeline_live/show.ex:122
#: lib/memex_web/live/pipeline_live/show.ex:121
#, elixir-autogen, elixir-format
msgid "edit %{slug}"
msgstr ""
@ -398,7 +398,7 @@ msgstr ""
#: lib/memex_web/live/context_live/show.ex:18
#: lib/memex_web/live/note_live/show.ex:18
#: lib/memex_web/live/pipeline_live/show.ex:19
#: lib/memex_web/live/pipeline_live/show.ex:18
#, elixir-autogen, elixir-format
msgid "%{slug} could not be found"
msgstr ""
@ -444,7 +444,7 @@ msgstr ""
msgid "%{title} created"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.ex:94
#: lib/memex_web/live/pipeline_live/show.ex:93
#, elixir-autogen, elixir-format
msgid "%{title} deleted"
msgstr ""
@ -454,7 +454,7 @@ msgstr ""
msgid "%{title} saved"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.ex:124
#: lib/memex_web/live/pipeline_live/show.ex:123
#, elixir-autogen, elixir-format
msgid "add step to %{slug}"
msgstr ""

View File

@ -362,7 +362,7 @@ msgstr ""
#: lib/memex_web/live/note_live/index.ex:57
#: lib/memex_web/live/note_live/show.ex:40
#: lib/memex_web/live/pipeline_live/index.ex:57
#: lib/memex_web/live/pipeline_live/show.ex:76
#: lib/memex_web/live/pipeline_live/show.ex:75
#, elixir-autogen, elixir-format
msgid "%{slug} deleted"
msgstr ""
@ -379,7 +379,7 @@ msgstr ""
#: lib/memex_web/live/note_live/index.ex:23
#: lib/memex_web/live/note_live/show.ex:47
#: lib/memex_web/live/pipeline_live/index.ex:23
#: lib/memex_web/live/pipeline_live/show.ex:122
#: lib/memex_web/live/pipeline_live/show.ex:121
#, elixir-autogen, elixir-format
msgid "edit %{slug}"
msgstr ""
@ -396,7 +396,7 @@ msgstr ""
#: lib/memex_web/live/context_live/show.ex:18
#: lib/memex_web/live/note_live/show.ex:18
#: lib/memex_web/live/pipeline_live/show.ex:19
#: lib/memex_web/live/pipeline_live/show.ex:18
#, elixir-autogen, elixir-format
msgid "%{slug} could not be found"
msgstr ""
@ -442,7 +442,7 @@ msgstr ""
msgid "%{title} created"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.ex:94
#: lib/memex_web/live/pipeline_live/show.ex:93
#, elixir-autogen, elixir-format
msgid "%{title} deleted"
msgstr ""
@ -452,7 +452,7 @@ msgstr ""
msgid "%{title} saved"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.ex:124
#: lib/memex_web/live/pipeline_live/show.ex:123
#, elixir-autogen, elixir-format
msgid "add step to %{slug}"
msgstr ""

View File

@ -363,7 +363,7 @@ msgstr ""
#: lib/memex_web/live/note_live/index.ex:57
#: lib/memex_web/live/note_live/show.ex:40
#: lib/memex_web/live/pipeline_live/index.ex:57
#: lib/memex_web/live/pipeline_live/show.ex:76
#: lib/memex_web/live/pipeline_live/show.ex:75
#, elixir-autogen, elixir-format
msgid "%{slug} deleted"
msgstr ""
@ -380,7 +380,7 @@ msgstr ""
#: lib/memex_web/live/note_live/index.ex:23
#: lib/memex_web/live/note_live/show.ex:47
#: lib/memex_web/live/pipeline_live/index.ex:23
#: lib/memex_web/live/pipeline_live/show.ex:122
#: lib/memex_web/live/pipeline_live/show.ex:121
#, elixir-autogen, elixir-format
msgid "edit %{slug}"
msgstr ""
@ -397,7 +397,7 @@ msgstr ""
#: lib/memex_web/live/context_live/show.ex:18
#: lib/memex_web/live/note_live/show.ex:18
#: lib/memex_web/live/pipeline_live/show.ex:19
#: lib/memex_web/live/pipeline_live/show.ex:18
#, elixir-autogen, elixir-format
msgid "%{slug} could not be found"
msgstr ""
@ -443,7 +443,7 @@ msgstr ""
msgid "%{title} created"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.ex:94
#: lib/memex_web/live/pipeline_live/show.ex:93
#, elixir-autogen, elixir-format
msgid "%{title} deleted"
msgstr ""
@ -453,7 +453,7 @@ msgstr ""
msgid "%{title} saved"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.ex:124
#: lib/memex_web/live/pipeline_live/show.ex:123
#, elixir-autogen, elixir-format
msgid "add step to %{slug}"
msgstr ""