39 lines
1 KiB
Elixir
39 lines
1 KiB
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
|
|
_ = Application.ensure_all_started(:aprsme)
|
|
|
|
case Aprsme.Accounts.get_user_by_email(email) do
|
|
nil ->
|
|
IO.puts(:stderr, "Error: No user found with email #{email}")
|
|
System.halt(1)
|
|
|
|
user ->
|
|
role = String.to_existing_atom(role_name)
|
|
|
|
case Aprsme.Accounts.set_user_role(user, role) do
|
|
{:ok, _user} ->
|
|
IO.puts("Set #{email} role to #{role_name}")
|
|
|
|
{:error, changeset} ->
|
|
IO.puts(:stderr, "Error: Could not update role: #{inspect(changeset.errors)}")
|
|
System.halt(1)
|
|
end
|
|
end
|
|
end
|
|
|
|
def run(_args) do
|
|
IO.puts(:stderr, "Usage: mix aprsme.user_role EMAIL user|admin")
|
|
System.halt(1)
|
|
end
|
|
end
|