From e89c81de768302103b142afbca1f5600a8e4dcf0 Mon Sep 17 00:00:00 2001 From: Yuhong Sun Date: Sat, 11 May 2024 16:25:56 -0700 Subject: [PATCH] Make User Promotion Demotion sync calls (#1448) --- .vscode/launch.template.jsonc | 3 -- backend/danswer/server/manage/users.py | 66 +++++++++++++------------- web/src/app/admin/users/page.tsx | 10 ++-- 3 files changed, 37 insertions(+), 42 deletions(-) diff --git a/.vscode/launch.template.jsonc b/.vscode/launch.template.jsonc index 5525165708..c5780a65a4 100644 --- a/.vscode/launch.template.jsonc +++ b/.vscode/launch.template.jsonc @@ -29,8 +29,6 @@ "module": "uvicorn", "cwd": "${workspaceFolder}/backend", "env": { - "AUTH_TYPE": "disabled", - "LOG_ALL_MODEL_INTERACTIONS": "True", "LOG_LEVEL": "DEBUG", "PYTHONUNBUFFERED": "1" }, @@ -48,7 +46,6 @@ "module": "uvicorn", "cwd": "${workspaceFolder}/backend", "env": { - "AUTH_TYPE": "disabled", "LOG_ALL_MODEL_INTERACTIONS": "True", "LOG_LEVEL": "DEBUG", "PYTHONUNBUFFERED": "1" diff --git a/backend/danswer/server/manage/users.py b/backend/danswer/server/manage/users.py index fe978d236c..7258a8564f 100644 --- a/backend/danswer/server/manage/users.py +++ b/backend/danswer/server/manage/users.py @@ -2,9 +2,6 @@ from fastapi import APIRouter from fastapi import Depends from fastapi import HTTPException from fastapi import status -from fastapi_users.db import SQLAlchemyUserDatabase -from fastapi_users_db_sqlalchemy import UUID_ID -from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import Session from danswer.auth.schemas import UserRead @@ -14,8 +11,8 @@ from danswer.auth.users import current_user from danswer.auth.users import get_display_email from danswer.auth.users import optional_user from danswer.db.engine import get_session -from danswer.db.engine import get_sqlalchemy_async_engine from danswer.db.models import User +from danswer.db.users import get_user_by_email from danswer.db.users import list_users from danswer.server.manage.models import UserByEmail from danswer.server.manage.models import UserInfo @@ -25,41 +22,42 @@ router = APIRouter(prefix="/manage") @router.patch("/promote-user-to-admin") -async def promote_admin( - user_email: UserByEmail, user: User = Depends(current_admin_user) +def promote_admin( + user_email: UserByEmail, + _: User = Depends(current_admin_user), + db_session: Session = Depends(get_session), ) -> None: - if user.role != UserRole.ADMIN: - raise HTTPException(status_code=401, detail="Unauthorized") - async with AsyncSession(get_sqlalchemy_async_engine()) as asession: - user_db = SQLAlchemyUserDatabase[User, UUID_ID](asession, User) - user_to_promote = await user_db.get_by_email(user_email.user_email) - if not user_to_promote: - raise HTTPException(status_code=404, detail="User not found") - user_to_promote.role = UserRole.ADMIN - asession.add(user_to_promote) - await asession.commit() - return + user_to_promote = get_user_by_email( + email=user_email.user_email, db_session=db_session + ) + if not user_to_promote: + raise HTTPException(status_code=404, detail="User not found") + + user_to_promote.role = UserRole.ADMIN + db_session.add(user_to_promote) + db_session.commit() -@router.patch("/demote-admin-to-user") +@router.patch("/demote-admin-to-basic") async def demote_admin( - user_email: UserByEmail, user: User = Depends(current_admin_user) + user_email: UserByEmail, + user: User = Depends(current_admin_user), + db_session: Session = Depends(get_session), ) -> None: - if user.role != UserRole.ADMIN: - raise HTTPException(status_code=401, detail="Unauthorized") - async with AsyncSession(get_sqlalchemy_async_engine()) as asession: - user_db = SQLAlchemyUserDatabase[User, UUID_ID](asession, User) - user_to_demote = await user_db.get_by_email(user_email.user_email) - if not user_to_demote: - raise HTTPException(status_code=404, detail="User not found") - if user_to_demote.id == user.id: - raise HTTPException( - status_code=400, detail="Cannot demote yourself from admin role" - ) - user_to_demote.role = UserRole.BASIC - asession.add(user_to_demote) - await asession.commit() - return + user_to_demote = get_user_by_email( + email=user_email.user_email, db_session=db_session + ) + if not user_to_demote: + raise HTTPException(status_code=404, detail="User not found") + + if user_to_demote.id == user.id: + raise HTTPException( + status_code=400, detail="Cannot demote yourself from admin role!" + ) + + user_to_demote.role = UserRole.BASIC + db_session.add(user_to_demote) + db_session.commit() @router.get("/users") diff --git a/web/src/app/admin/users/page.tsx b/web/src/app/admin/users/page.tsx index ba0aa61fa3..fb2695ef1d 100644 --- a/web/src/app/admin/users/page.tsx +++ b/web/src/app/admin/users/page.tsx @@ -83,20 +83,20 @@ const UsersTable = () => { } else { mutate("/api/manage/users"); setPopup({ - message: "User promoted to admin!", + message: "User promoted to admin user!", type: "success", }); } }} > - Promote to Admin! + Promote to Admin User )} {user.role === "admin" && ( )}