mirror of
https://github.com/imartinez/privateGPT.git
synced 2025-06-28 16:26:56 +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
|
# add your model's MetaData object here
|
||||||
# for 'autogenerate' support
|
# for 'autogenerate' support
|
||||||
# from myapp import mymodel
|
# from myapp import mymodel1w
|
||||||
# target_metadata = mymodel.Base.metadata
|
# target_metadata = mymodel.Base.metadata
|
||||||
target_metadata = Base.metadata
|
target_metadata = Base.metadata
|
||||||
|
|
||||||
|
@ -285,3 +285,61 @@ def delete_user(
|
|||||||
content={"message": "User deleted successfully"},
|
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.core.security import get_password_hash, verify_password
|
||||||
from private_gpt.users.crud.base import CRUDBase
|
from private_gpt.users.crud.base import CRUDBase
|
||||||
from private_gpt.users.models.user import User
|
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.user_role import UserRole
|
||||||
from private_gpt.users.models.role import Role
|
from private_gpt.users.models.role import Role
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
@ -89,5 +89,8 @@ class CRUDUser(CRUDBase[User, UserCreate, UserUpdate]):
|
|||||||
.all()
|
.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)
|
user = CRUDUser(User)
|
@ -16,10 +16,5 @@ class CRUDUserRole(CRUDBase[UserRole, UserRoleCreate, UserRoleUpdate]):
|
|||||||
self, db: Session, *, user_id: int
|
self, db: Session, *, user_id: int
|
||||||
)-> Optional[UserRole]:
|
)-> Optional[UserRole]:
|
||||||
return db.query(UserRole).filter(UserRole.user_id == user_id).delete()
|
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)
|
user_role = CRUDUserRole(UserRole)
|
@ -1,6 +1,6 @@
|
|||||||
from .role import Role, RoleCreate, RoleInDB, RoleUpdate
|
from .role import Role, RoleCreate, RoleInDB, RoleUpdate
|
||||||
from .token import TokenSchema, TokenPayload
|
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 .user_role import UserRole, UserRoleCreate, UserRoleInDB, UserRoleUpdate
|
||||||
from .subscription import Subscription, SubscriptionBase, SubscriptionCreate, SubscriptionUpdate
|
from .subscription import Subscription, SubscriptionBase, SubscriptionCreate, SubscriptionUpdate
|
||||||
from .company import Company, CompanyBase, CompanyCreate, CompanyUpdate
|
from .company import Company, CompanyBase, CompanyCreate, CompanyUpdate
|
@ -58,6 +58,8 @@ class Profile(UserBaseSchema):
|
|||||||
class DeleteUser(BaseModel):
|
class DeleteUser(BaseModel):
|
||||||
id: int
|
id: int
|
||||||
|
|
||||||
class AdminUpdate(BaseModel):
|
|
||||||
|
class UserAdminUpdate(BaseModel):
|
||||||
|
id: int
|
||||||
fullname: str
|
fullname: str
|
||||||
role: int
|
role: str
|
@ -19,6 +19,7 @@ class UserRoleCreate(UserRoleBase):
|
|||||||
|
|
||||||
# Properties to receive via API on update
|
# Properties to receive via API on update
|
||||||
class UserRoleUpdate(BaseModel):
|
class UserRoleUpdate(BaseModel):
|
||||||
|
user_id: int
|
||||||
role_id: int
|
role_id: int
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
|
Loading…
Reference in New Issue
Block a user