current_user.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. from typing import Optional, Dict, Any
  2. from core.enums import DataScopeEnum
  3. class CurrentUser:
  4. """当前用户信息类"""
  5. _user_id: Optional[int] = None
  6. _username: Optional[str] = None
  7. _nick_name: Optional[str] = None
  8. _dept_id: Optional[int] = None
  9. _email: Optional[str] = None
  10. _phone: Optional[str] = None
  11. _data_scope: Optional[DataScopeEnum] = None
  12. _roles: list = None
  13. _role_ids: list = None
  14. _menus: list = None
  15. def __init__(
  16. self,
  17. user_id: Optional[int] = None,
  18. username: Optional[str] = None,
  19. nick_name: Optional[str] = None,
  20. dept_id: Optional[int] = None,
  21. dept_name: Optional[str] = None,
  22. email: Optional[str] = None,
  23. phone: Optional[str] = None,
  24. data_scope: Optional[DataScopeEnum] = None,
  25. roles: list = None,
  26. role_ids: list = None,
  27. menus: list = None,
  28. permissions: list = None,
  29. ):
  30. self._user_id = user_id
  31. self._username = username
  32. self._nick_name = nick_name
  33. self._dept_id = dept_id
  34. self._dept_name = dept_name
  35. self._email = email
  36. self._phone = phone
  37. self._data_scope = data_scope
  38. self._roles = roles
  39. self._role_ids = role_ids
  40. self._menus = menus
  41. self._permissions = permissions
  42. @property
  43. def user_id(self) -> Optional[int]:
  44. return self._user_id
  45. @property
  46. def username(self) -> Optional[str]:
  47. return self._username
  48. @property
  49. def nick_name(self) -> Optional[str]:
  50. return self._nick_name
  51. @property
  52. def dept_id(self) -> Optional[int]:
  53. return self._dept_id
  54. @property
  55. def dept_name(self) -> Optional[str]:
  56. return self._dept_name
  57. @property
  58. def email(self) -> Optional[str]:
  59. return self._email
  60. @property
  61. def phone(self) -> Optional[str]:
  62. return self._phone
  63. @property
  64. def data_scope(self) -> DataScopeEnum:
  65. return self._data_scope or DataScopeEnum.SELF
  66. @property
  67. def roles(self) -> list:
  68. return self._roles or []
  69. @property
  70. def role_ids(self) -> list:
  71. return self._role_ids or []
  72. @property
  73. def menus(self) -> list:
  74. return self._menus or []
  75. @property
  76. def permissions(self) -> list:
  77. return self._permissions or []
  78. @property
  79. def is_super_admin(self) -> bool:
  80. """检查当前用户是否为超级管理员
  81. 从当前用户对象中检查管理员状态
  82. Returns:
  83. bool: 是否为超级管理员,如果用户不存在则返回False
  84. """
  85. return self._username == "admin" or "admin" in self.roles
  86. @classmethod
  87. def from_dict(cls, data: Dict[str, Any]) -> "CurrentUser":
  88. return cls(
  89. user_id=data.get("user_id"),
  90. username=data.get("username"),
  91. nick_name=data.get("nick_name"),
  92. dept_id=data.get("dept_id"),
  93. dept_name=data.get("dept_name"),
  94. email=data.get("email"),
  95. phone=data.get("phone"),
  96. data_scope=DataScopeEnum.to_enum(
  97. data.get("data_scope", DataScopeEnum.SELF.key)
  98. ),
  99. roles=data.get("roles", []),
  100. role_ids=data.get("role_ids", []),
  101. menus=data.get("menus", []),
  102. permissions=data.get("permissions", []),
  103. )
  104. def to_dict(self) -> Dict[str, Any]:
  105. return {
  106. "user_id": self.user_id,
  107. "username": self.username,
  108. "nick_name": self.nick_name,
  109. "dept_id": self.dept_id,
  110. "dept_name": self.dept_name,
  111. "email": self.email,
  112. "phone": self.phone,
  113. "data_scope": self.data_scope.key,
  114. "roles": self.roles,
  115. "role_ids": self.role_ids,
  116. "menus": self.menus,
  117. "permissions": self.permissions,
  118. }