permissions.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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