mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-06-20 04:50:57 +02:00
Make User Promotion Demotion sync calls (#1448)
This commit is contained in:
parent
5bf123da53
commit
e89c81de76
3
.vscode/launch.template.jsonc
vendored
3
.vscode/launch.template.jsonc
vendored
@ -29,8 +29,6 @@
|
|||||||
"module": "uvicorn",
|
"module": "uvicorn",
|
||||||
"cwd": "${workspaceFolder}/backend",
|
"cwd": "${workspaceFolder}/backend",
|
||||||
"env": {
|
"env": {
|
||||||
"AUTH_TYPE": "disabled",
|
|
||||||
"LOG_ALL_MODEL_INTERACTIONS": "True",
|
|
||||||
"LOG_LEVEL": "DEBUG",
|
"LOG_LEVEL": "DEBUG",
|
||||||
"PYTHONUNBUFFERED": "1"
|
"PYTHONUNBUFFERED": "1"
|
||||||
},
|
},
|
||||||
@ -48,7 +46,6 @@
|
|||||||
"module": "uvicorn",
|
"module": "uvicorn",
|
||||||
"cwd": "${workspaceFolder}/backend",
|
"cwd": "${workspaceFolder}/backend",
|
||||||
"env": {
|
"env": {
|
||||||
"AUTH_TYPE": "disabled",
|
|
||||||
"LOG_ALL_MODEL_INTERACTIONS": "True",
|
"LOG_ALL_MODEL_INTERACTIONS": "True",
|
||||||
"LOG_LEVEL": "DEBUG",
|
"LOG_LEVEL": "DEBUG",
|
||||||
"PYTHONUNBUFFERED": "1"
|
"PYTHONUNBUFFERED": "1"
|
||||||
|
@ -2,9 +2,6 @@ from fastapi import APIRouter
|
|||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
from fastapi import HTTPException
|
from fastapi import HTTPException
|
||||||
from fastapi import status
|
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 sqlalchemy.orm import Session
|
||||||
|
|
||||||
from danswer.auth.schemas import UserRead
|
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 get_display_email
|
||||||
from danswer.auth.users import optional_user
|
from danswer.auth.users import optional_user
|
||||||
from danswer.db.engine import get_session
|
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.models import User
|
||||||
|
from danswer.db.users import get_user_by_email
|
||||||
from danswer.db.users import list_users
|
from danswer.db.users import list_users
|
||||||
from danswer.server.manage.models import UserByEmail
|
from danswer.server.manage.models import UserByEmail
|
||||||
from danswer.server.manage.models import UserInfo
|
from danswer.server.manage.models import UserInfo
|
||||||
@ -25,41 +22,42 @@ router = APIRouter(prefix="/manage")
|
|||||||
|
|
||||||
|
|
||||||
@router.patch("/promote-user-to-admin")
|
@router.patch("/promote-user-to-admin")
|
||||||
async def promote_admin(
|
def promote_admin(
|
||||||
user_email: UserByEmail, user: User = Depends(current_admin_user)
|
user_email: UserByEmail,
|
||||||
|
_: User = Depends(current_admin_user),
|
||||||
|
db_session: Session = Depends(get_session),
|
||||||
) -> None:
|
) -> None:
|
||||||
if user.role != UserRole.ADMIN:
|
user_to_promote = get_user_by_email(
|
||||||
raise HTTPException(status_code=401, detail="Unauthorized")
|
email=user_email.user_email, db_session=db_session
|
||||||
async with AsyncSession(get_sqlalchemy_async_engine()) as asession:
|
)
|
||||||
user_db = SQLAlchemyUserDatabase[User, UUID_ID](asession, User)
|
if not user_to_promote:
|
||||||
user_to_promote = await user_db.get_by_email(user_email.user_email)
|
raise HTTPException(status_code=404, detail="User not found")
|
||||||
if not user_to_promote:
|
|
||||||
raise HTTPException(status_code=404, detail="User not found")
|
user_to_promote.role = UserRole.ADMIN
|
||||||
user_to_promote.role = UserRole.ADMIN
|
db_session.add(user_to_promote)
|
||||||
asession.add(user_to_promote)
|
db_session.commit()
|
||||||
await asession.commit()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
@router.patch("/demote-admin-to-user")
|
@router.patch("/demote-admin-to-basic")
|
||||||
async def demote_admin(
|
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:
|
) -> None:
|
||||||
if user.role != UserRole.ADMIN:
|
user_to_demote = get_user_by_email(
|
||||||
raise HTTPException(status_code=401, detail="Unauthorized")
|
email=user_email.user_email, db_session=db_session
|
||||||
async with AsyncSession(get_sqlalchemy_async_engine()) as asession:
|
)
|
||||||
user_db = SQLAlchemyUserDatabase[User, UUID_ID](asession, User)
|
if not user_to_demote:
|
||||||
user_to_demote = await user_db.get_by_email(user_email.user_email)
|
raise HTTPException(status_code=404, detail="User not found")
|
||||||
if not user_to_demote:
|
|
||||||
raise HTTPException(status_code=404, detail="User not found")
|
if user_to_demote.id == user.id:
|
||||||
if user_to_demote.id == user.id:
|
raise HTTPException(
|
||||||
raise HTTPException(
|
status_code=400, detail="Cannot demote yourself from admin role!"
|
||||||
status_code=400, detail="Cannot demote yourself from admin role"
|
)
|
||||||
)
|
|
||||||
user_to_demote.role = UserRole.BASIC
|
user_to_demote.role = UserRole.BASIC
|
||||||
asession.add(user_to_demote)
|
db_session.add(user_to_demote)
|
||||||
await asession.commit()
|
db_session.commit()
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/users")
|
@router.get("/users")
|
||||||
|
@ -83,20 +83,20 @@ const UsersTable = () => {
|
|||||||
} else {
|
} else {
|
||||||
mutate("/api/manage/users");
|
mutate("/api/manage/users");
|
||||||
setPopup({
|
setPopup({
|
||||||
message: "User promoted to admin!",
|
message: "User promoted to admin user!",
|
||||||
type: "success",
|
type: "success",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Promote to Admin!
|
Promote to Admin User
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
{user.role === "admin" && (
|
{user.role === "admin" && (
|
||||||
<Button
|
<Button
|
||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
const res = await fetch(
|
const res = await fetch(
|
||||||
"/api/manage/demote-admin-to-user",
|
"/api/manage/demote-admin-to-basic",
|
||||||
{
|
{
|
||||||
method: "PATCH",
|
method: "PATCH",
|
||||||
headers: {
|
headers: {
|
||||||
@ -116,13 +116,13 @@ const UsersTable = () => {
|
|||||||
} else {
|
} else {
|
||||||
mutate("/api/manage/users");
|
mutate("/api/manage/users");
|
||||||
setPopup({
|
setPopup({
|
||||||
message: "Admin demoted to user!",
|
message: "Admin demoted to basic user!",
|
||||||
type: "success",
|
type: "success",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Demote to User
|
Demote to Basic User
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user