permissions.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  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 QxzLoginPermission(BasePermission):
  5. message = "error no permissions"
  6. def has_permission(self, request, view):
  7. try:
  8. auth_info = request.META.get('HTTP_AUTHORIZATION')
  9. new_token = auth_info.replace('Bearer ', '')
  10. print('8888888888', request.session['hnyfqxz'])
  11. old_token = request.session['hnyfqxz']
  12. if new_token != old_token:
  13. raise Exception()
  14. except Exception as e:
  15. print('999999999999', e)
  16. return False
  17. return True
  18. class RegisterViewPermission(BasePermission):
  19. def has_permission(self, request, view):
  20. try:
  21. user = request.user
  22. if user['username'] == "管理员":
  23. return True
  24. else:
  25. return False
  26. except:
  27. return False
  28. class ModulePermission(BasePermission):
  29. def has_permission(self, request, view):
  30. try:
  31. user = request.user
  32. is_superuser = user.get("is_superuser")
  33. user_modules = user.get("user_modules")
  34. path = request.path
  35. if path.startswith("/pestanalysis"):
  36. if is_superuser == "True" or user_modules == "1":
  37. return True
  38. else:
  39. return False
  40. except:
  41. return False
  42. class QXZDeviceDetailPermission(BasePermission):
  43. message = "非此账户下设备"
  44. def has_permission(self, request, view):
  45. uid = request.user
  46. device_id = request.query_params.get("device_id")
  47. if device_id is None:
  48. return True
  49. qxz_list_cache = default_cache.get(str(uid)+"_qxz_list")
  50. if qxz_list_cache:
  51. if device_id in qxz_list_cache:
  52. return True
  53. else:
  54. return False
  55. else:
  56. wheres = {
  57. 'device_type_id':5,
  58. '$or': [
  59. {'owner_uid': uid},
  60. {'user_dealer': uid}
  61. ]
  62. }
  63. project = {
  64. 'device_id': '$device_id'
  65. }
  66. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  67. data = m.find_many(wheres=wheres, options=project)
  68. qxz_list_cache = []
  69. for item in data:
  70. qxz_list_cache.append(item["device_id"])
  71. default_cache.set(str(uid)+"_qxz_list", qxz_list_cache,60*5)
  72. if device_id in qxz_list_cache:
  73. return True
  74. else:
  75. return False
  76. class ScdDeviceDetailPermission(BasePermission):
  77. message = "非此账户下设备"
  78. def has_permission(self, request, view):
  79. uid = request.user
  80. device_id = request.query_params.get("device_id")
  81. if device_id is None:
  82. return True
  83. scd_dict_cache = default_cache.get(str(uid)+"_scd_list")
  84. if scd_dict_cache:
  85. if device_id in scd_dict_cache:
  86. return True
  87. else:
  88. return False
  89. else:
  90. wheres = {
  91. 'device_type_id':2,
  92. '$or': [
  93. {'owner_uid': uid},
  94. {'user_dealer': uid}
  95. ]
  96. }
  97. project = {
  98. 'id': '$id',
  99. 'device_id': '$device_id'
  100. }
  101. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  102. data = m.find_many(wheres=wheres, options=project)
  103. scd_dict_cache = {}
  104. for item in data:
  105. scd_dict_cache[item["device_id"]]=item["id"]
  106. default_cache.set(str(uid)+"_scd_list", scd_dict_cache,60*5)
  107. if device_id in scd_dict_cache:
  108. return True
  109. else:
  110. return False
  111. class CbdDeviceDetailPermission(BasePermission):
  112. message = "非此账户下设备"
  113. def has_permission(self, request, view):
  114. uid = request.user
  115. device_id = request.query_params.get("device_id")
  116. if device_id is None:
  117. return True
  118. cbd_dict_cache = default_cache.get(str(uid)+"_cbd_list")
  119. if cbd_dict_cache:
  120. if device_id in cbd_dict_cache:
  121. return True
  122. else:
  123. return False
  124. else:
  125. wheres = {
  126. 'device_type_id':3,
  127. '$or': [
  128. {'owner_uid': uid},
  129. {'user_dealer': uid}
  130. ]
  131. }
  132. project = {
  133. 'id': '$id',
  134. 'device_id': '$device_id',
  135. 'disable': '$disable'
  136. }
  137. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  138. data = m.find_many(wheres=wheres, options=project)
  139. cbd_dict_cache = {}
  140. for item in data:
  141. cbd_dict_cache[item["device_id"]]={"d_id":item["id"],"disable":item["disable"]}
  142. default_cache.set(str(uid)+"_cbd_list", cbd_dict_cache,60*5)
  143. if device_id in cbd_dict_cache:
  144. return True
  145. else:
  146. return False
  147. class BzyDeviceDetailPermission(BasePermission):
  148. message = "非此账户下设备"
  149. def has_permission(self, request, view):
  150. uid = request.user
  151. device_id = request.query_params.get("device_id")
  152. if device_id is None:
  153. return True
  154. bzy_dict_cache = default_cache.get(str(uid)+"_bzy_list")
  155. if bzy_dict_cache:
  156. if device_id in bzy_dict_cache:
  157. return True
  158. else:
  159. return False
  160. else:
  161. wheres = {
  162. 'device_type_id':7,
  163. '$or': [
  164. {'owner_uid': uid},
  165. {'user_dealer': uid}
  166. ]
  167. }
  168. project = {
  169. 'id': '$id',
  170. 'device_id': '$device_id'
  171. }
  172. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  173. data = m.find_many(wheres=wheres, options=project)
  174. bzy_dict_cache = {}
  175. for item in data:
  176. bzy_dict_cache[item["device_id"]]=item["id"]
  177. default_cache.set(str(uid)+"_bzy_list", bzy_dict_cache,60*5)
  178. if device_id in bzy_dict_cache:
  179. return True
  180. else:
  181. return False
  182. class XycbDeviceDetailPermission(BasePermission):
  183. message = "非此账户下设备"
  184. def has_permission(self, request, view):
  185. uid = request.user
  186. device_id = request.query_params.get("device_id")
  187. if device_id is None:
  188. return True
  189. xycb_dict_cache = default_cache.get(str(uid)+"_xycb_list")
  190. if xycb_dict_cache:
  191. if device_id in xycb_dict_cache:
  192. return True
  193. else:
  194. return False
  195. else:
  196. wheres = {
  197. 'device_type_id':4,
  198. '$or': [
  199. {'owner_uid': uid},
  200. {'user_dealer': uid}
  201. ]
  202. }
  203. project = {
  204. 'id': '$id',
  205. 'device_id': '$device_id'
  206. }
  207. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  208. data = m.find_many(wheres=wheres, options=project)
  209. xycb_dict_cache = {}
  210. for item in data:
  211. xycb_dict_cache[item["device_id"]]=item["id"]
  212. default_cache.set(str(uid)+"_xycb_list", xycb_dict_cache,60*5)
  213. if device_id in xycb_dict_cache:
  214. return True
  215. else:
  216. return False
  217. class XctDeviceDetailPermission(BasePermission):
  218. message = "非此账户下设备"
  219. def has_permission(self, request, view):
  220. uid = request.user
  221. device_id = request.query_params.get("device_id")
  222. if device_id is None:
  223. return True
  224. xct_dict_cache = default_cache.get(str(uid)+"_xct_list")
  225. if xct_dict_cache:
  226. if device_id in xct_dict_cache:
  227. return True
  228. else:
  229. return False
  230. else:
  231. wheres = {
  232. 'device_type_id':12,
  233. '$or': [
  234. {'owner_uid': uid},
  235. {'user_dealer': uid}
  236. ]
  237. }
  238. project = {
  239. 'id': '$id',
  240. 'device_id': '$device_id'
  241. }
  242. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  243. data = m.find_many(wheres=wheres, options=project)
  244. xct_dict_cache = {}
  245. for item in data:
  246. xct_dict_cache[item["device_id"]]=item["id"]
  247. default_cache.set(str(uid)+"_xct_list", xct_dict_cache,60*5)
  248. if device_id in xct_dict_cache:
  249. return True
  250. else:
  251. return False
  252. class GssqDeviceDetailPermission(BasePermission):
  253. message = "非此账户下设备"
  254. def has_permission(self, request, view):
  255. uid = request.user
  256. device_id = request.query_params.get("device_id")
  257. if device_id is None:
  258. return True
  259. gssq_dict_cache = default_cache.get(str(uid)+"_gssq_list")
  260. if gssq_dict_cache:
  261. if device_id in gssq_dict_cache:
  262. return True
  263. else:
  264. return False
  265. else:
  266. wheres = {
  267. 'device_type_id':15,
  268. '$or': [
  269. {'owner_uid': uid},
  270. {'user_dealer': uid}
  271. ]
  272. }
  273. project = {
  274. 'id': '$id',
  275. 'device_id': '$device_id'
  276. }
  277. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  278. data = m.find_many(wheres=wheres, options=project)
  279. gssq_dict_cache = {}
  280. for item in data:
  281. gssq_dict_cache[item["device_id"]]=item["id"]
  282. default_cache.set(str(uid)+"_gssq_list", gssq_dict_cache,60*5)
  283. if device_id in gssq_dict_cache:
  284. return True
  285. else:
  286. return False
  287. class JkDeviceDetailPermission(BasePermission):
  288. message = "非此账户下设备"
  289. def has_permission(self, request, view):
  290. uid = request.user
  291. device_id = request.query_params.get("device_id")
  292. if device_id is None:
  293. return True
  294. jk_dict_cache = default_cache.get(str(uid)+"_jk_list")
  295. if jk_dict_cache:
  296. if device_id in jk_dict_cache:
  297. return True
  298. else:
  299. return False
  300. else:
  301. wheres = {
  302. 'device_type_id':6,
  303. '$or': [
  304. {'owner_uid': uid},
  305. {'user_dealer': uid}
  306. ]
  307. }
  308. project = {
  309. 'id': '$id',
  310. 'device_id': '$device_id'
  311. }
  312. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  313. data = m.find_many(wheres=wheres, options=project)
  314. xct_dict_cache = {}
  315. for item in data:
  316. xct_dict_cache[item["device_id"]]=item["id"]
  317. default_cache.set(str(uid)+"_jk_list", xct_dict_cache,60*5)
  318. if device_id in xct_dict_cache:
  319. return True
  320. else:
  321. return False