48 lines
1.3 KiB
Elixir
48 lines
1.3 KiB
Elixir
defmodule Auth.User do
|
|
@moduledoc """
|
|
The baseline user schema module.
|
|
"""
|
|
use Ecto.Schema
|
|
use Pow.Ecto.Schema
|
|
use Pow.Extension.Ecto.Schema,
|
|
extensions: [PowResetPassword, PowEmailConfirmation]
|
|
|
|
import Pow.Ecto.Schema.Changeset, only: [new_password_changeset: 3]
|
|
|
|
alias Ecto.Changeset
|
|
|
|
schema "users" do
|
|
field :roles, {:array, :string}
|
|
field :display_name, :string
|
|
field :homepage_url, :string
|
|
|
|
pow_user_fields()
|
|
|
|
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, :display_name])
|
|
|> pow_extension_changeset(attrs)
|
|
end
|
|
|
|
def changeset(user_or_changeset, attrs) do
|
|
user_or_changeset
|
|
|> pow_user_id_field_changeset(attrs)
|
|
|> pow_current_password_changeset(attrs)
|
|
|> new_password_changeset(attrs, @pow_config)
|
|
|> Changeset.cast(attrs, [:roles])
|
|
|> pow_extension_changeset(attrs)
|
|
end
|
|
|
|
def reset_password_changeset(user = %Auth.User{}, params) do
|
|
user
|
|
|> new_password_changeset(params, @pow_config)
|
|
|> Changeset.validate_required([:password])
|
|
end
|
|
end
|