forked from shibao/cannery
add delete user function
This commit is contained in:
parent
d424a6631a
commit
8e4e3872f5
@ -244,6 +244,11 @@ defmodule Cannery.Accounts do
|
||||
end
|
||||
end
|
||||
|
||||
@spec delete_user!(User.t()) :: User.t()
|
||||
def delete_user!(%User{} = user) do
|
||||
user |> Repo.delete!()
|
||||
end
|
||||
|
||||
## Session
|
||||
|
||||
@doc """
|
||||
|
@ -64,6 +64,20 @@ defmodule CanneryWeb.UserSettingsController do
|
||||
end
|
||||
end
|
||||
|
||||
def delete(conn, %{"id" => user_id}) do
|
||||
if user_id == conn.assigns.current_user.id do
|
||||
Accounts.delete_user!(conn.assigns.current_user)
|
||||
|
||||
conn
|
||||
|> put_flash(:error, "Your account has been deleted")
|
||||
|> redirect(to: Routes.home_path(conn, :index))
|
||||
else
|
||||
conn
|
||||
|> put_flash(:error, "Unable to delete user")
|
||||
|> redirect(to: Routes.user_settings_path(conn, :edit))
|
||||
end
|
||||
end
|
||||
|
||||
defp assign_email_and_password_changesets(conn, _opts) do
|
||||
user = conn.assigns.current_user
|
||||
|
||||
|
@ -12,7 +12,7 @@ defmodule CanneryWeb.Router do
|
||||
plug :put_secure_browser_headers
|
||||
plug :fetch_current_user
|
||||
end
|
||||
|
||||
|
||||
pipeline :require_admin do
|
||||
plug :require_role, role: :admin
|
||||
end
|
||||
@ -26,7 +26,7 @@ defmodule CanneryWeb.Router do
|
||||
|
||||
live "/", HomeLive, :index
|
||||
end
|
||||
|
||||
|
||||
## Authentication routes
|
||||
|
||||
scope "/", CanneryWeb do
|
||||
@ -47,6 +47,7 @@ defmodule CanneryWeb.Router do
|
||||
|
||||
get "/users/settings", UserSettingsController, :edit
|
||||
put "/users/settings", UserSettingsController, :update
|
||||
delete "/users/settings/:id", UserSettingsController, :delete
|
||||
get "/users/settings/confirm_email/:token", UserSettingsController, :confirm_email
|
||||
|
||||
live "/tags", TagLive.Index, :index
|
||||
@ -80,7 +81,7 @@ defmodule CanneryWeb.Router do
|
||||
|
||||
scope "/", CanneryWeb do
|
||||
pipe_through [:browser, :require_authenticated_user, :require_admin]
|
||||
|
||||
|
||||
live_dashboard "/dashboard", metrics: CanneryWeb.Telemetry, ecto_repos: [Cannery.Repo]
|
||||
|
||||
live "/invites", InviteLive.Index, :index
|
||||
|
@ -1,4 +1,4 @@
|
||||
<div class="flex flex-col justify-center items-center space-y-4">
|
||||
<div class="mb-8 flex flex-col justify-center items-center space-y-8">
|
||||
<h1 class="title text-primary-500 text-xl">
|
||||
Settings
|
||||
</h1>
|
||||
@ -22,7 +22,7 @@
|
||||
<%= email_input f, :email, required: true, class: "input input-primary col-span-2" %>
|
||||
</div>
|
||||
<%= error_tag f, :email %>
|
||||
|
||||
|
||||
<div class="grid grid-cols-3 justify-center items-center text-center space-x-4">
|
||||
<%= label f, :current_password, for: "current_password_for_email", class: "title text-lg text-primary-500" %>
|
||||
<%= password_input f, :current_password,
|
||||
@ -58,7 +58,7 @@
|
||||
class: "input input-primary col-span-2" %>
|
||||
</div>
|
||||
<%= error_tag f, :password %>
|
||||
|
||||
|
||||
<div class="grid grid-cols-3 justify-center items-center text-center space-x-4">
|
||||
<%= label f, :password_confirmation, "Confirm new password",
|
||||
class: "title text-lg text-primary-500" %>
|
||||
@ -67,7 +67,7 @@
|
||||
class: "input input-primary col-span-2" %>
|
||||
</div>
|
||||
<%= error_tag f, :password_confirmation %>
|
||||
|
||||
|
||||
<div class="grid grid-cols-3 justify-center items-center text-center space-x-4">
|
||||
<%= label f, :current_password,
|
||||
for: "current_password_for_password",
|
||||
@ -82,4 +82,8 @@
|
||||
|
||||
<%= submit "Change password", class: "btn btn-primary" %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= link "Delete User", to: Routes.user_settings_path(@conn, :delete, @current_user),
|
||||
method: :delete, class: "btn btn-alert",
|
||||
data: [confirm: "Are you sure you want to delete your account?"] %>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user