permission.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # coding=utf-8
  2. from rest_framework import permissions
  3. from apps.customer.models import Customer
  4. from apps.WechatApplet.models import WechatApplet
  5. from utils.exceptions import CustomError
  6. from utils import response_error
  7. class IsCustomerUser(permissions.BasePermission):
  8. def has_permission(self, request, view):
  9. if not request.user or not request.user.is_authenticated:
  10. return False
  11. if not request.user.is_customer():
  12. return False
  13. appid = request.GET.get('appid', None)
  14. if not appid:
  15. appid = request.POST.get('appid')
  16. try:
  17. app = WechatApplet.getByAppid(appid)
  18. except:
  19. return False
  20. customer = Customer.objects.filter(tenant_id=app.tenant_id, user_id=request.user.id).first()
  21. if not customer:
  22. return False
  23. request.customer = customer
  24. return True
  25. class IsTenantUser(permissions.BasePermission):
  26. def has_permission(self, request, view):
  27. if not request.user or not request.user.is_authenticated:
  28. return False
  29. return request.user.is_tenant()
  30. class IsAdministratorUser(permissions.BasePermission):
  31. def has_permission(self, request, view):
  32. if not request.user or not request.user.is_authenticated:
  33. return False
  34. return request.user.is_administrator()
  35. decorator_with_arguments = lambda decorator: lambda *args, **kwargs: lambda func: decorator(func, *args, **kwargs)
  36. @decorator_with_arguments
  37. def permission_required(function, perm):
  38. def _function(viewset, *args, **kwargs):
  39. # user_id = viewset.request.META.get('HTTP_USER_ID')
  40. # token = viewset.request.META.get('HTTP_Authorization')
  41. # if user_id and token:
  42. # try:
  43. # user = User.objects.get(pk=user_id)
  44. # except:
  45. # return ForbiddenJSONResponse()
  46. # valid = token_generator.check_token(user, token)
  47. # if valid:
  48. # request.user = user
  49. # viewset.request.user = user
  50. # else:
  51. # return ForbiddenJSONResponse()
  52. if viewset.request.user.has_perm(perm):
  53. return function(viewset, *args, **kwargs)
  54. else:
  55. from django.contrib.auth.models import Permission
  56. ps = perm.split('.')
  57. try:
  58. p = Permission.objects.get(codename=ps[1], content_type__app_label=ps[0])
  59. except:
  60. raise CustomError(u"权限配置错误!")
  61. raise CustomError(u"您没有[%s-%s]权限,无法执行该操作,请联系管理员分配权限!" % (p.content_type.name, p.name))
  62. return _function