permissions.py 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  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. if bzy_dict_cache:
  142. if device_id in bzy_dict_cache:
  143. return True
  144. else:
  145. return False
  146. else:
  147. wheres = {
  148. 'device_type_id':7,
  149. '$or': [
  150. {'owner_uid': uid},
  151. {'user_dealer': uid}
  152. ]
  153. }
  154. project = {
  155. 'id': '$id',
  156. 'device_id': '$device_id'
  157. }
  158. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  159. data = m.find_many(wheres=wheres, options=project)
  160. bzy_dict_cache = {}
  161. for item in data:
  162. bzy_dict_cache[item["device_id"]]=item["id"]
  163. default_cache.set(str(uid)+"_bzy_list", bzy_dict_cache,60*5)
  164. if device_id in bzy_dict_cache:
  165. return True
  166. else:
  167. return False
  168. class XycbDeviceDetailPermission(BasePermission):
  169. message = "非此账户下设备"
  170. def has_permission(self, request, view):
  171. uid = request.user
  172. device_id = request.query_params.get("device_id")
  173. if device_id is None:
  174. return True
  175. xycb_dict_cache = default_cache.get(str(uid)+"_xycb_list")
  176. if xycb_dict_cache:
  177. if device_id in xycb_dict_cache:
  178. return True
  179. else:
  180. return False
  181. else:
  182. wheres = {
  183. 'device_type_id':4,
  184. '$or': [
  185. {'owner_uid': uid},
  186. {'user_dealer': uid}
  187. ]
  188. }
  189. project = {
  190. 'id': '$id',
  191. 'device_id': '$device_id'
  192. }
  193. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  194. data = m.find_many(wheres=wheres, options=project)
  195. xycb_dict_cache = {}
  196. for item in data:
  197. xycb_dict_cache[item["device_id"]]=item["id"]
  198. default_cache.set(str(uid)+"_xycb_list", xycb_dict_cache,60*5)
  199. if device_id in xycb_dict_cache:
  200. return True
  201. else:
  202. return False
  203. class XctDeviceDetailPermission(BasePermission):
  204. message = "非此账户下设备"
  205. def has_permission(self, request, view):
  206. uid = request.user
  207. device_id = request.query_params.get("device_id")
  208. if device_id is None:
  209. return True
  210. xct_dict_cache = default_cache.get(str(uid)+"_xct_list")
  211. if xct_dict_cache:
  212. if device_id in xct_dict_cache:
  213. return True
  214. else:
  215. return False
  216. else:
  217. wheres = {
  218. 'device_type_id':12,
  219. '$or': [
  220. {'owner_uid': uid},
  221. {'user_dealer': uid}
  222. ]
  223. }
  224. project = {
  225. 'id': '$id',
  226. 'device_id': '$device_id'
  227. }
  228. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  229. data = m.find_many(wheres=wheres, options=project)
  230. xct_dict_cache = {}
  231. for item in data:
  232. xct_dict_cache[item["device_id"]]=item["id"]
  233. default_cache.set(str(uid)+"_xct_list", xct_dict_cache,60*5)
  234. if device_id in xct_dict_cache:
  235. return True
  236. else:
  237. return False