From 7bce782dff01f3ad2a630ba8874088b55fb3007f Mon Sep 17 00:00:00 2001 From: Robert Prehn Date: Tue, 28 Jul 2020 08:02:45 -0500 Subject: [PATCH] feat: Make users adminable --- apps/auth/lib/auth/user.ex | 10 +++++++++ apps/auth/lib/auth/user_admin.ex | 30 ++++++++++++++++++++++++++ apps/content/lib/content/post_admin.ex | 12 +++++++++++ apps/core/lib/core_web/endpoint.ex | 1 + config/config.exs | 2 +- 5 files changed, 54 insertions(+), 1 deletion(-) diff --git a/apps/auth/lib/auth/user.ex b/apps/auth/lib/auth/user.ex index da9c4da6..0fa40ad7 100644 --- a/apps/auth/lib/auth/user.ex +++ b/apps/auth/lib/auth/user.ex @@ -21,6 +21,16 @@ defmodule Auth.User do timestamps() end + def admin_changeset(user_or_changeset, attrs) do + role_list = Phoenix.json_library().decode!(Map.get(attrs, "roles")) + attrs = Map.put(attrs, "roles", role_list) + + user_or_changeset + |> pow_user_id_field_changeset(attrs) + |> Changeset.cast(attrs, [:roles]) + |> pow_extension_changeset(attrs) + end + def changeset(user_or_changeset, attrs) do user_or_changeset |> pow_user_id_field_changeset(attrs) diff --git a/apps/auth/lib/auth/user_admin.ex b/apps/auth/lib/auth/user_admin.ex index 9b50db2f..405ebbc6 100644 --- a/apps/auth/lib/auth/user_admin.ex +++ b/apps/auth/lib/auth/user_admin.ex @@ -2,6 +2,14 @@ defmodule Auth.UserAdmin do import Ecto.Query, only: [from: 2] alias Auth.{Repo,User} + def create_changeset(schema, attrs) do + Auth.User.admin_changeset(schema, attrs) + end + + def update_changeset(schema, attrs) do + Auth.User.admin_changeset(schema, attrs) + end + def widgets(_schema, _conn) do user_count = (from u in User, @@ -18,4 +26,26 @@ defmodule Auth.UserAdmin do } ] end + + def index(_) do + [ + id: nil, + email: nil, + roles: %{value: fn u -> Enum.join(u.roles, ", ") end}, + display_name: nil, + homepage_url: nil, + email_confirmed_at: nil, + inserted_at: nil, + updated_at: nil, + ] + end + + def form_fields(_) do + [ + email: nil, + roles: nil, + display_name: nil, + homepage_url: nil, + ] + end end diff --git a/apps/content/lib/content/post_admin.ex b/apps/content/lib/content/post_admin.ex index 12873126..ca94d9a3 100644 --- a/apps/content/lib/content/post_admin.ex +++ b/apps/content/lib/content/post_admin.ex @@ -17,6 +17,18 @@ defmodule Content.PostAdmin do Content.Post.changeset(schema, attrs) end + def index(_) do + [ + id: nil, + post_type: nil, + post_name: nil, + post_title: nil, + post_status: nil, + post_date_gmt: nil, + post_modified_gmt: nil, + ] + end + def form_fields(_) do authors_query = from u in Auth.User, diff --git a/apps/core/lib/core_web/endpoint.ex b/apps/core/lib/core_web/endpoint.ex index bb6675c3..9df7c2e4 100644 --- a/apps/core/lib/core_web/endpoint.ex +++ b/apps/core/lib/core_web/endpoint.ex @@ -57,5 +57,6 @@ defmodule CoreWeb.Endpoint do plug Plug.Head plug Plug.Session, @session_options plug Pow.Plug.Session, otp_app: :auth_web + plug PowPersistentSession.Plug.Cookie plug CoreWeb.Router end diff --git a/config/config.exs b/config/config.exs index 94f9ee27..fcfbb54f 100644 --- a/config/config.exs +++ b/config/config.exs @@ -23,7 +23,7 @@ config :auth_web, config :auth_web, :pow, user: Auth.User, repo: Auth.Repo, - extensions: [PowEmailConfirmation], + extensions: [PowEmailConfirmation, PowPersistentSession], controller_callbacks: Pow.Extension.Phoenix.ControllerCallbacks, mailer_backend: AuthWeb.Pow.Mailer, web_mailer_module: AuthWeb,