Some checks failed
Build and Push / Build and Push Docker Image (push) Failing after 2s
31 lines
922 B
Elixir
31 lines
922 B
Elixir
defmodule Mix.Tasks.Aprsme.UserRole do
|
|
@shortdoc "Promotes or demotes an existing user"
|
|
@moduledoc """
|
|
Sets an existing user's role by email.
|
|
|
|
mix aprsme.user_role user@example.com admin
|
|
mix aprsme.user_role user@example.com user
|
|
"""
|
|
|
|
use Mix.Task
|
|
|
|
@impl Mix.Task
|
|
def run([email, role_name]) when role_name in ["user", "admin"] do
|
|
Mix.Task.run("app.start")
|
|
|
|
case Aprsme.Accounts.get_user_by_email(email) do
|
|
nil ->
|
|
Mix.raise("No user found with email #{email}")
|
|
|
|
user ->
|
|
role = String.to_existing_atom(role_name)
|
|
|
|
case Aprsme.Accounts.set_user_role(user, role) do
|
|
{:ok, _user} -> Mix.shell().info("Set #{email} role to #{role_name}")
|
|
{:error, changeset} -> Mix.raise("Could not update role: #{inspect(changeset.errors)}")
|
|
end
|
|
end
|
|
end
|
|
|
|
def run(_args), do: Mix.raise("Usage: mix aprsme.user_role EMAIL user|admin")
|
|
end
|