mirror of
https://github.com/imartinez/privateGPT.git
synced 2025-06-28 08:18:09 +00:00
Added api for admin update user
This commit is contained in:
parent
5c2a025280
commit
a4931a1a31
@ -25,7 +25,7 @@ if config.config_file_name is not None:
|
||||
|
||||
# add your model's MetaData object here
|
||||
# for 'autogenerate' support
|
||||
# from myapp import mymodel
|
||||
# from myapp import mymodel1w
|
||||
# target_metadata = mymodel.Base.metadata
|
||||
target_metadata = Base.metadata
|
||||
|
||||
|
@ -285,3 +285,61 @@ def delete_user(
|
||||
content={"message": "User deleted successfully"},
|
||||
)
|
||||
|
||||
|
||||
|
||||
@router.post("/update_user")
|
||||
def admin_update_user(
|
||||
*,
|
||||
db: Session = Depends(deps.get_db),
|
||||
user_update: schemas.UserAdminUpdate,
|
||||
current_user: models.User = Security(
|
||||
deps.get_current_user,
|
||||
scopes=[Role.ADMIN["name"], Role.SUPER_ADMIN["name"]],
|
||||
),
|
||||
) -> Any:
|
||||
"""
|
||||
Update the user by the Admin/Super_ADMIN
|
||||
"""
|
||||
existing_user = crud.user.get(db, id=user_update.id)
|
||||
|
||||
if existing_user is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail=f"User not found with id: {user_update.id}",
|
||||
)
|
||||
if existing_user.fullname == user_update.fullname:
|
||||
pass
|
||||
else:
|
||||
fullname = crud.user.get_by_name(db, name=user_update.fullname)
|
||||
if fullname:
|
||||
raise HTTPException(
|
||||
status_code=409,
|
||||
detail="The user with this username already exists!",
|
||||
)
|
||||
|
||||
role = crud.role.get_by_name(db,name=user_update.role)
|
||||
if role.id == 1:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail=f"Cannot create SUPER ADMIN!",
|
||||
)
|
||||
|
||||
user_role = crud.user_role.get_by_user_id(db, user_id=existing_user.id)
|
||||
role_in = schemas.UserRoleUpdate(
|
||||
user_id = existing_user.id,
|
||||
role_id = role.id,
|
||||
)
|
||||
role = crud.user_role.update(db, db_obj=user_role, obj_in=role_in)
|
||||
|
||||
user_in = schemas.UserUpdate(fullname=user_update.fullname,
|
||||
email=existing_user.email, company_id=existing_user.user_role.company_id)
|
||||
print("User in: ", user_in)
|
||||
user = crud.user.update(db, db_obj=existing_user, obj_in=user_in)
|
||||
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_200_OK,
|
||||
content={"message": "User updated successfully",
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
|
@ -3,7 +3,7 @@ from typing import Any, Dict, List, Optional, Union
|
||||
from private_gpt.users.core.security import get_password_hash, verify_password
|
||||
from private_gpt.users.crud.base import CRUDBase
|
||||
from private_gpt.users.models.user import User
|
||||
from private_gpt.users.schemas.user import UserCreate, UserUpdate, AdminUpdate
|
||||
from private_gpt.users.schemas.user import UserCreate, UserUpdate
|
||||
from private_gpt.users.models.user_role import UserRole
|
||||
from private_gpt.users.models.role import Role
|
||||
from sqlalchemy.orm import Session
|
||||
@ -89,5 +89,8 @@ class CRUDUser(CRUDBase[User, UserCreate, UserUpdate]):
|
||||
.all()
|
||||
)
|
||||
|
||||
|
||||
def get_by_name(self, db: Session, *, name: str) -> Optional[User]:
|
||||
return db.query(self.model).filter(User.fullname == name).first()
|
||||
|
||||
|
||||
user = CRUDUser(User)
|
@ -16,10 +16,5 @@ class CRUDUserRole(CRUDBase[UserRole, UserRoleCreate, UserRoleUpdate]):
|
||||
self, db: Session, *, user_id: int
|
||||
)-> Optional[UserRole]:
|
||||
return db.query(UserRole).filter(UserRole.user_id == user_id).delete()
|
||||
|
||||
# def update_user_role(
|
||||
# self, db: Session, *, user_id: int, role_id: int
|
||||
# ) -> Optional[UserRole]:
|
||||
# return self.update(db, )
|
||||
|
||||
user_role = CRUDUserRole(UserRole)
|
@ -1,6 +1,6 @@
|
||||
from .role import Role, RoleCreate, RoleInDB, RoleUpdate
|
||||
from .token import TokenSchema, TokenPayload
|
||||
from .user import User, UserCreate, UserInDB, UserUpdate, UserBaseSchema, Profile, UsernameUpdate, DeleteUser, AdminUpdate
|
||||
from .user import User, UserCreate, UserInDB, UserUpdate, UserBaseSchema, Profile, UsernameUpdate, DeleteUser, UserAdminUpdate
|
||||
from .user_role import UserRole, UserRoleCreate, UserRoleInDB, UserRoleUpdate
|
||||
from .subscription import Subscription, SubscriptionBase, SubscriptionCreate, SubscriptionUpdate
|
||||
from .company import Company, CompanyBase, CompanyCreate, CompanyUpdate
|
@ -58,6 +58,8 @@ class Profile(UserBaseSchema):
|
||||
class DeleteUser(BaseModel):
|
||||
id: int
|
||||
|
||||
class AdminUpdate(BaseModel):
|
||||
|
||||
class UserAdminUpdate(BaseModel):
|
||||
id: int
|
||||
fullname: str
|
||||
role: int
|
||||
role: str
|
@ -19,6 +19,7 @@ class UserRoleCreate(UserRoleBase):
|
||||
|
||||
# Properties to receive via API on update
|
||||
class UserRoleUpdate(BaseModel):
|
||||
user_id: int
|
||||
role_id: int
|
||||
|
||||
class Config:
|
||||
|
Loading…
Reference in New Issue
Block a user