Add admin user delete route
This commit is contained in:
@@ -3907,3 +3907,24 @@ async def user_toggle(request: Request, user_id: int, csrf_token: str = Form(...
|
|||||||
await pool.execute("UPDATE admin_users SET is_active=NOT is_active, updated_at=NOW() WHERE id=$1", user_id)
|
await pool.execute("UPDATE admin_users SET is_active=NOT is_active, updated_at=NOW() WHERE id=$1", user_id)
|
||||||
await audit(user["id"], "user.toggle", "user", user_id)
|
await audit(user["id"], "user.toggle", "user", user_id)
|
||||||
return redirect("/users")
|
return redirect("/users")
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/users/{user_id}/delete")
|
||||||
|
async def user_delete(request: Request, user_id: int, csrf_token: str = Form(...)):
|
||||||
|
user = await get_current_user(request)
|
||||||
|
if not user:
|
||||||
|
return redirect("/login")
|
||||||
|
require_csrf(user, csrf_token)
|
||||||
|
if user["role"] != "admin" or int(user["id"]) == user_id:
|
||||||
|
return redirect("/users")
|
||||||
|
pool = await get_pool()
|
||||||
|
bootstrap_login = settings.admin_bootstrap_login.strip().lower()
|
||||||
|
target = await pool.fetchrow("SELECT id, login, role FROM admin_users WHERE id=$1", user_id)
|
||||||
|
if not target:
|
||||||
|
return redirect("/users")
|
||||||
|
if str(target["login"]).strip().lower() == bootstrap_login:
|
||||||
|
logger.warning("Attempt to delete bootstrap admin '{}' was blocked", bootstrap_login)
|
||||||
|
return redirect("/users")
|
||||||
|
await pool.execute("DELETE FROM admin_users WHERE id=$1", user_id)
|
||||||
|
await audit(user["id"], "user.delete", "user", user_id, None, {"login": target["login"], "role": target["role"]})
|
||||||
|
return redirect("/users")
|
||||||
|
|||||||
Reference in New Issue
Block a user