permissions.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. from rest_framework.permissions import BasePermission
  2. from django.core.cache import cache as default_cache
  3. from utils.db_utils import MongoDBTools
  4. class RegisterViewPermission(BasePermission):
  5. def has_permission(self, request, view):
  6. try:
  7. user = request.user
  8. if user['username'] == "管理员":
  9. return True
  10. else:
  11. return False
  12. except:
  13. return False
  14. class ModulePermission(BasePermission):
  15. def has_permission(self, request, view):
  16. try:
  17. user = request.user
  18. is_superuser = user.get("is_superuser")
  19. user_modules = user.get("user_modules")
  20. path = request.path
  21. if path.startswith("/pestanalysis"):
  22. if is_superuser == "True" or user_modules == "1":
  23. return True
  24. else:
  25. return False
  26. except:
  27. return False
  28. class QXZDeviceDetailPermission(BasePermission):
  29. message = "非此账户下设备"
  30. def has_permission(self, request, view):
  31. uid = request.user
  32. device_id = request.query_params.get("device_id")
  33. if device_id is None:
  34. return True
  35. qxz_list_cache = default_cache.get(str(uid)+"_qxz_list")
  36. if qxz_list_cache:
  37. if device_id in qxz_list_cache:
  38. return True
  39. else:
  40. return False
  41. else:
  42. wheres = {
  43. 'device_type_id':5,
  44. '$or': [
  45. {'owner_uid': uid},
  46. {'user_dealer': uid}
  47. ]
  48. }
  49. project = {
  50. 'device_id': '$device_id'
  51. }
  52. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  53. data = m.find_many(wheres=wheres, options=project)
  54. qxz_list_cache = []
  55. for item in data:
  56. qxz_list_cache.append(item["device_id"])
  57. default_cache.set(str(uid)+"_qxz_list", qxz_list_cache,60*5)
  58. if device_id in qxz_list_cache:
  59. return True
  60. else:
  61. return False
  62. class ScdDeviceDetailPermission(BasePermission):
  63. message = "非此账户下设备"
  64. def has_permission(self, request, view):
  65. uid = request.user
  66. device_id = request.query_params.get("device_id")
  67. if device_id is None:
  68. return True
  69. scd_dict_cache = default_cache.get(str(uid)+"_scd_list")
  70. if scd_dict_cache:
  71. if device_id in scd_dict_cache:
  72. return True
  73. else:
  74. return False
  75. else:
  76. wheres = {
  77. 'device_type_id':2,
  78. '$or': [
  79. {'owner_uid': uid},
  80. {'user_dealer': uid}
  81. ]
  82. }
  83. project = {
  84. 'id': '$id',
  85. 'device_id': '$device_id'
  86. }
  87. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  88. data = m.find_many(wheres=wheres, options=project)
  89. scd_dict_cache = {}
  90. for item in data:
  91. scd_dict_cache[item["device_id"]]=item["id"]
  92. default_cache.set(str(uid)+"_scd_list", scd_dict_cache,60*5)
  93. if device_id in scd_dict_cache:
  94. return True
  95. else:
  96. return False
  97. class CbdDeviceDetailPermission(BasePermission):
  98. message = "非此账户下设备"
  99. def has_permission(self, request, view):
  100. uid = request.user
  101. device_id = request.query_params.get("device_id")
  102. if device_id is None:
  103. return True
  104. cbd_dict_cache = default_cache.get(str(uid)+"_cbd_list")
  105. if cbd_dict_cache:
  106. if device_id in cbd_dict_cache:
  107. return True
  108. else:
  109. return False
  110. else:
  111. wheres = {
  112. 'device_type_id':3,
  113. '$or': [
  114. {'owner_uid': uid},
  115. {'user_dealer': uid}
  116. ]
  117. }
  118. project = {
  119. 'id': '$id',
  120. 'device_id': '$device_id',
  121. 'disable': '$disable'
  122. }
  123. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  124. data = m.find_many(wheres=wheres, options=project)
  125. cbd_dict_cache = {}
  126. for item in data:
  127. cbd_dict_cache[item["device_id"]]={"d_id":item["id"],"disable":item["disable"]}
  128. default_cache.set(str(uid)+"_cbd_list", cbd_dict_cache,60*5)
  129. if device_id in cbd_dict_cache:
  130. return True
  131. else:
  132. return False
  133. class BzyDeviceDetailPermission(BasePermission):
  134. message = "非此账户下设备"
  135. def has_permission(self, request, view):
  136. uid = request.user
  137. device_id = request.query_params.get("device_id")
  138. if device_id is None:
  139. return True
  140. bzy_dict_cache = default_cache.get(str(uid)+"_bzy_list")
  141. print(type(bzy_dict_cache))
  142. print(bzy_dict_cache)
  143. if bzy_dict_cache:
  144. if device_id in bzy_dict_cache:
  145. return True
  146. else:
  147. return False
  148. else:
  149. wheres = {
  150. 'device_type_id':7,
  151. '$or': [
  152. {'owner_uid': uid},
  153. {'user_dealer': uid}
  154. ]
  155. }
  156. project = {
  157. 'id': '$id',
  158. 'device_id': '$device_id'
  159. }
  160. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  161. data = m.find_many(wheres=wheres, options=project)
  162. bzy_dict_cache = {}
  163. for item in data:
  164. bzy_dict_cache[item["device_id"]]=item["id"]
  165. default_cache.set(str(uid)+"_bzy_list", bzy_dict_cache,60*5)
  166. if device_id in bzy_dict_cache:
  167. return True
  168. else:
  169. return False
  170. class XycbDeviceDetailPermission(BasePermission):
  171. message = "非此账户下设备"
  172. def has_permission(self, request, view):
  173. uid = request.user
  174. device_id = request.query_params.get("device_id")
  175. if device_id is None:
  176. return True
  177. xycb_dict_cache = default_cache.get(str(uid)+"_xycb_list")
  178. if xycb_dict_cache:
  179. if device_id in xycb_dict_cache:
  180. return True
  181. else:
  182. return False
  183. else:
  184. wheres = {
  185. 'device_type_id':4,
  186. '$or': [
  187. {'owner_uid': uid},
  188. {'user_dealer': uid}
  189. ]
  190. }
  191. project = {
  192. 'id': '$id',
  193. 'device_id': '$device_id'
  194. }
  195. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  196. data = m.find_many(wheres=wheres, options=project)
  197. xycb_dict_cache = {}
  198. for item in data:
  199. xycb_dict_cache[item["device_id"]]=item["id"]
  200. default_cache.set(str(uid)+"_xycb_list", xycb_dict_cache,60*5)
  201. if device_id in xycb_dict_cache:
  202. return True
  203. else:
  204. return False