Я написал следующий код для конечной точки
Код: Выделить всё
@router.get("/isAdmin")
def is_admin(userId: str): # sourcery skip: merge-nested-ifs
"""Enddpoint to check if the current user is an admin or not
Args:
email_id (str): email id of the user to be validated
"""
# Check if the user exists in our firestore database based on the email ID
db = firestore.client()
print(userId)
user_ref = db.collection("users").document(userId).get()
print(user_ref, userId)
# Check if the user exists and if the user has admin role
if user_ref:
# If the user exists, check if the user is an admin and return the roles if the user is an admin
if user_ref.to_dict()["hasAdminRole"]:
user_id = user_ref[0].id
user_roles_ref = (
db.collection("users").document(user_id).collection("roles")
)
user_roles_data = user_roles_ref.stream()
roles = {role.id: role.to_dict() for role in user_roles_data}
return {"hasAdminRole": True, "roles": roles}
# If the user doesn't exist or doesn't have admin role,
# check the tempAdmins collection to see if the user is a temporary admin
temp_admin_ref = db.collection("tempAdmins").document(userId).get()
temp_admin_data = temp_admin_ref.get()
if temp_admin_data:
# Get the documentID from the data
temp_admin_id = temp_admin_data[0].id
# Reference the roles document and get the data
temp_admin_roles_ref = (
db.collection("tempAdmins").document(temp_admin_id).collection("roles")
)
temp_admin_roles_data = temp_admin_roles_ref.stream()
roles = {role.id: role.to_dict() for role in temp_admin_roles_data}
return {"hasAdminRole": True, "roles": roles}
# return no access message if the user is not an admin
return JSONResponse(
status_code=response_status.HTTP_401_UNAUTHORIZED,
content={"message": NO_ADMIN_ACCESS_ERROR, "hasAdminRole": False},
)
Код: Выделить всё
{
"message": "User does not exist"
}
Конечная точка, к которой я обращаюсь: http://127.0.0.1:8000/users/isAdmin?ema ... 40test.com
Подробнее здесь: https://stackoverflow.com/questions/760 ... -responses