decorators.py 3.6 KB

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