refactor: dbcrud->dbuser
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from fastapi import APIRouter, Request, Depends, Response, Security, encoders
|
||||
import typing as t
|
||||
|
||||
from app.core.common import ApiReturnModel,ApiReturnPage
|
||||
from app.core.apiexception import APIException
|
||||
from app.db.session import get_db
|
||||
from app.db.crud import (
|
||||
get_allusers,
|
||||
@@ -12,129 +13,174 @@ from app.db.crud import (
|
||||
assign_userrole,
|
||||
get_roles,
|
||||
)
|
||||
from app.db.schemas import UserCreate, UserEdit, User, UserOut,Role
|
||||
from app.db.schemas import UserCreate, UserEdit, User, UserOut,RoleBase,Permission
|
||||
from app.core.auth import get_current_user,get_current_active_user, get_current_active_superuser
|
||||
from app.db.cruddb.dbuser import dbuser
|
||||
|
||||
users_router = r = APIRouter()
|
||||
|
||||
|
||||
@r.get(
|
||||
"/users",
|
||||
response_model=t.List[User],
|
||||
"/users",tags=["User"],
|
||||
response_model=ApiReturnPage[User],
|
||||
response_model_exclude_none=True,
|
||||
)
|
||||
async def users_list(
|
||||
response: Response,
|
||||
request: Request,
|
||||
db=Depends(get_db),
|
||||
current_user=Depends(get_current_active_user),
|
||||
):
|
||||
"""
|
||||
Get all users
|
||||
"""
|
||||
if current_user.is_superuser:
|
||||
users = get_allusers(db)
|
||||
else:
|
||||
users = get_users(db)
|
||||
# This is necessary for react-admin to work
|
||||
#response.headers["Content-Range"] = f"0-9/{len(users)}"
|
||||
return users
|
||||
try:
|
||||
if current_user.is_superuser:
|
||||
users = dbuser.get_users(db)
|
||||
else:
|
||||
users = dbuser.get_users_not_admin(db)
|
||||
return users
|
||||
except Exception as e:
|
||||
raise APIException('user:users',request.url._url,f"Error occurred while get user list",e)
|
||||
|
||||
|
||||
@r.get("/users/me", response_model=User, response_model_exclude_none=True)
|
||||
@r.get("/users/me", tags=["User"],
|
||||
response_model=ApiReturnModel[User],
|
||||
response_model_exclude_none=True,
|
||||
)
|
||||
async def user_me(current_user=Depends(get_current_active_user)):
|
||||
"""
|
||||
Get own user
|
||||
"""
|
||||
return current_user
|
||||
return ApiReturnModel(data = current_user)
|
||||
|
||||
|
||||
@r.get(
|
||||
"/users/{user_id}",
|
||||
response_model=User,
|
||||
"/users/{user_id}",tags=["User"],
|
||||
response_model=ApiReturnModel[User|None],
|
||||
response_model_exclude_none=True,
|
||||
)
|
||||
async def user_details(
|
||||
request: Request,
|
||||
user_id: int,
|
||||
db=Depends(get_db),
|
||||
current_user=Depends(get_current_active_superuser),
|
||||
current_user=Depends(get_current_active_user),
|
||||
):
|
||||
"""
|
||||
Get any user details
|
||||
"""
|
||||
user = get_user(db, user_id)
|
||||
return user
|
||||
# return encoders.jsonable_encoder(
|
||||
# user, skip_defaults=True, exclude_none=True,
|
||||
# )
|
||||
try:
|
||||
user = dbuser.get(db, user_id)
|
||||
if user:
|
||||
if user.is_superuser and not current_user.is_superuser:
|
||||
user = None
|
||||
return ApiReturnModel(data = user)
|
||||
except Exception as e:
|
||||
raise APIException('user:users',request.url._url,f"Error occurred while get user({user_id}) detail:",e)
|
||||
|
||||
|
||||
@r.post("/users", response_model=User, response_model_exclude_none=True)
|
||||
@r.post("/users", tags=["User"],
|
||||
response_model=ApiReturnModel[User|None],
|
||||
response_model_exclude_none=True,
|
||||
)
|
||||
async def user_create(
|
||||
request: Request,
|
||||
user: UserCreate,
|
||||
db=Depends(get_db),
|
||||
current_user=Depends(get_current_active_superuser),
|
||||
current_user=Depends(get_current_active_user),
|
||||
):
|
||||
"""
|
||||
Create a new user
|
||||
"""
|
||||
return create_user(db, user)
|
||||
try:
|
||||
if user.is_superuser and not current_user.is_superuser:
|
||||
return ApiReturnModel(data = None)
|
||||
return ApiReturnModel(data =dbuser.create_user(db, user,current_user.id))
|
||||
except Exception as e:
|
||||
raise APIException('user:users',request.url._url,f"Error occurred while create user({user.email}):",e)
|
||||
|
||||
|
||||
@r.put(
|
||||
"/users/{user_id}", response_model=User, response_model_exclude_none=True
|
||||
"/users/{user_id}", tags=["User"],
|
||||
response_model=ApiReturnModel[User|None],
|
||||
response_model_exclude_none=True,
|
||||
)
|
||||
async def user_edit(
|
||||
request: Request,
|
||||
user_id: int,
|
||||
user: UserEdit,
|
||||
db=Depends(get_db),
|
||||
current_user=Depends(get_current_active_superuser),
|
||||
current_user=Depends(get_current_active_user),
|
||||
):
|
||||
"""
|
||||
Update existing user
|
||||
"""
|
||||
return edit_user(db, user_id, user)
|
||||
|
||||
try:
|
||||
if user.is_superuser and not current_user.is_superuser:
|
||||
return ApiReturnModel(data = None)
|
||||
return ApiReturnModel(data = dbuser.edit_user(db,user_id,user,current_user.id))
|
||||
except Exception as e:
|
||||
raise APIException('user:users',request.url._url,f"Error occurred while edit user({user_id}):",e)
|
||||
|
||||
@r.delete(
|
||||
"/users/{user_id}", response_model=User, response_model_exclude_none=True
|
||||
"/users/{user_id}", tags=["User"],
|
||||
response_model=ApiReturnModel[UserOut|None],
|
||||
response_model_exclude_none=True
|
||||
)
|
||||
async def user_delete(
|
||||
request: Request,
|
||||
user_id: int,
|
||||
db=Depends(get_db),
|
||||
current_user=Depends(get_current_active_superuser),
|
||||
current_user=Depends(get_current_active_user),
|
||||
):
|
||||
"""
|
||||
Delete existing user
|
||||
"""
|
||||
return delete_user(db, user_id)
|
||||
try:
|
||||
user = dbuser.get(db,user_id)
|
||||
if user.is_superuser and not current_user.is_superuser:
|
||||
return ApiReturnModel(data = None)
|
||||
return ApiReturnModel(data = dbuser.delete_user(db, user_id))
|
||||
except Exception as e:
|
||||
raise APIException('user:users',request.url._url,f"Error occurred while delete user({user_id}):",e)
|
||||
|
||||
|
||||
@r.post("/userrole",
|
||||
response_model=User,
|
||||
@r.post("/userrole",tags=["User"],
|
||||
response_model=ApiReturnModel[User],
|
||||
response_model_exclude_none=True,)
|
||||
async def assign_role(
|
||||
request: Request,
|
||||
userid:int,
|
||||
user_id:int,
|
||||
roles:t.List[int],
|
||||
db=Depends(get_db)
|
||||
):
|
||||
|
||||
return assign_userrole(db,userid,roles)
|
||||
|
||||
try:
|
||||
return ApiReturnModel(data = dbuser.assign_userrole(db,user_id,roles))
|
||||
except Exception as e:
|
||||
raise APIException('user:userrole',request.url._url,f"Error occurred while assign user({user_id}) roles({roles}):",e)
|
||||
|
||||
@r.get(
|
||||
"/roles",
|
||||
response_model=t.List[Role],
|
||||
"/roles",tags=["User"],
|
||||
response_model=ApiReturnModel[t.List[RoleBase]|None],
|
||||
response_model_exclude_none=True,
|
||||
)
|
||||
async def roles_list(
|
||||
response: Response,
|
||||
request: Request,
|
||||
db=Depends(get_db),
|
||||
current_user=Security(get_current_active_user, scopes=["role_list"]),
|
||||
current_user=Depends(get_current_active_user),
|
||||
#current_user=Security(get_current_active_user, scopes=["role_list"]),
|
||||
):
|
||||
roles = get_roles(db)
|
||||
return roles
|
||||
try:
|
||||
if current_user.is_superuser:
|
||||
roles = dbuser.get_roles(db)
|
||||
else:
|
||||
if len(current_user.roles)>0:
|
||||
roles = dbuser.get_roles_by_level(db,current_user.roles[0].level)
|
||||
else:
|
||||
roles = []
|
||||
return ApiReturnModel(data = roles)
|
||||
except Exception as e:
|
||||
raise APIException('user:roles',request.url._url,f"Error occurred while get roles:",e)
|
||||
|
||||
@r.get(
|
||||
"/userpermssions",tags=["User"],
|
||||
response_model=ApiReturnModel[t.List[Permission]|None],
|
||||
response_model_exclude_none=True,
|
||||
)
|
||||
async def permssions_list(
|
||||
request: Request,
|
||||
db=Depends(get_db),
|
||||
current_user=Depends(get_current_active_user),
|
||||
#current_user=Security(get_current_active_user, scopes=["role_list"]),
|
||||
):
|
||||
try:
|
||||
if current_user.is_superuser:
|
||||
permissions = dbuser.get_permissions(db)
|
||||
else:
|
||||
if len(current_user.roles)>0:
|
||||
permissions = dbuser.get_user_permissions(db,current_user.id)
|
||||
else:
|
||||
permissions = []
|
||||
return ApiReturnModel(data = permissions)
|
||||
except Exception as e:
|
||||
raise APIException('user:userpermssions',request.url._url,f"Error occurred while get user(){current_user.id} permissions:",e)
|
||||
|
||||
Reference in New Issue
Block a user