decorators.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from typing import Optional
  2. from fastapi import FastAPI, Header, HTTPException, Depends, Request
  3. from sqlalchemy.orm import Session
  4. from app import crud, get_db, get_page, schemas
  5. from configs.globals import g
  6. async def verify_user(request: Request, user_token: str = Header(), db: Session = Depends(get_db)):
  7. try:
  8. user = crud.verify_user_token(db, user_token)
  9. g.user_id = user.id
  10. g.user_name = user.name
  11. except Exception as e:
  12. raise HTTPException(status_code=401, detail=str(e))
  13. async def verify_super_admin(request: Request, user_token: str = Header(), db: Session = Depends(get_db)):
  14. try:
  15. user = crud.verify_user_token(db, user_token)
  16. g.user_id = user.id
  17. g.user_name = user.name
  18. except Exception as e:
  19. raise HTTPException(status_code=401, detail=str(e))
  20. if user.id != 1:
  21. raise HTTPException(status_code=402, detail='该用户不拥有此权限')
  22. async def verify_all(request: Request, user_token: str = Header(), item_token: str = Header(), db: Session = Depends(get_db)):
  23. try:
  24. user = crud.verify_user_token(db, user_token)
  25. g.user_id = user.id
  26. g.user_name = user.name
  27. except Exception as e:
  28. raise HTTPException(status_code=401, detail=str(e))
  29. try:
  30. project = crud.verify_item_token(db, item_token)
  31. g.project_id = project.id
  32. except Exception as e:
  33. raise HTTPException(status_code=403, detail=str(e))
  34. relations = crud.get_relations_by_user(db,user.id)
  35. project_role = {r.project_id:r.role_id for r in relations}
  36. if not project.id in project_role.keys():
  37. raise HTTPException(status_code=402, detail='该用户不属于此项目')
  38. role = crud.get_role_info(db,project_role[project.id])
  39. async def verify_special(request: Request, user_token: str = Header(), item_token: str = Header(), db: Session = Depends(get_db)):
  40. try:
  41. user = crud.verify_user_token(db, user_token)
  42. g.user_id = user.id
  43. g.user_name = user.name
  44. except Exception as e:
  45. raise HTTPException(status_code=401, detail=str(e))
  46. try:
  47. project = crud.verify_item_token(db, item_token)
  48. g.project_id = project.id
  49. except Exception as e:
  50. raise HTTPException(status_code=403, detail=str(e))
  51. relations = crud.get_relations_by_user(db,user.id)
  52. project_role = {r.project_id:r.role_id for r in relations}
  53. if not project.id in project_role.keys():
  54. raise HTTPException(status_code=402, detail='该用户不属于此项目')
  55. role = crud.get_role_info(db,project_role[project.id])
  56. if not role.code in ['726a51e45b4d11edbb4809c4df301a','9ff183445b4d11ed87db29f50d093a','eef984e65b4d11ed8cc491f9c82401']:
  57. raise HTTPException(status_code=402, detail='该用户没有此接口的权限')
  58. async def verify_admin(request: Request, user_token: str = Header(), item_token: str = Header(), db: Session = Depends(get_db)):
  59. try:
  60. user = crud.verify_user_token(db, user_token)
  61. g.user_id = user.id
  62. g.user_name = user.name
  63. except Exception as e:
  64. raise HTTPException(status_code=401, detail=str(e))
  65. try:
  66. project = crud.verify_item_token(db, item_token)
  67. g.project_id = project.id
  68. except Exception as e:
  69. raise HTTPException(status_code=403, detail=str(e))
  70. relations = crud.get_relations_by_user(db,user.id)
  71. project_role = {r.project_id:r.role_id for r in relations}
  72. if not project.id in project_role.keys():
  73. raise HTTPException(status_code=402, detail='该用户不属于此项目')
  74. role = crud.get_role_info(db,project_role[project.id])
  75. if not role.code in ['726a51e45b4d11edbb4809c4df301a','9ff183445b4d11ed87db29f50d093a','026bd8bc5b4e11ed857e6b5ec5c8d6']:
  76. raise HTTPException(status_code=402, detail='该用户没有此接口的权限')