permission.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # coding=utf-8
  2. from rest_framework import permissions
  3. from apps.WechatApplet.models import WechatApplet
  4. from utils.exceptions import CustomError
  5. class isLogin(permissions.BasePermission):
  6. def has_permission(self, request, view):
  7. if not request.user or not request.user.is_authenticated:
  8. return False
  9. return True
  10. def check_permission(request, perm):
  11. if not request.user or not request.user.is_authenticated:
  12. raise CustomError(u"身份认证失败,请重新登录!")
  13. from django.contrib.auth.models import Permission
  14. ps = perm.split('.')
  15. if request.user.has_perm(perm):
  16. return True
  17. else:
  18. try:
  19. p = Permission.objects.get(codename=ps[1], content_type__app_label=ps[0])
  20. except:
  21. raise CustomError(u"权限配置错误!")
  22. raise CustomError(u"您没有[%s--%s]权限,无法执行该操作,请联系管理员分配权限!" % (p.content_type.name, p.name))
  23. decorator_with_arguments = lambda decorator: lambda *args, **kwargs: lambda func: decorator(func, *args, **kwargs)
  24. @decorator_with_arguments
  25. def permission_required(function, perm):
  26. def _function(viewset, *args, **kwargs):
  27. # user_id = viewset.request.META.get('HTTP_USER_ID')
  28. # token = viewset.request.META.get('HTTP_Authorization')
  29. # if user_id and token:
  30. # try:
  31. # user = User.objects.get(pk=user_id)
  32. # except:
  33. # return ForbiddenJSONResponse()
  34. # valid = token_generator.check_token(user, token)
  35. # if valid:
  36. # request.user = user
  37. # viewset.request.user = user
  38. # else:
  39. # return ForbiddenJSONResponse()
  40. if viewset.request.user.has_perm(perm):
  41. return function(viewset, *args, **kwargs)
  42. else:
  43. from django.contrib.auth.models import Permission
  44. ps = perm.split('.')
  45. try:
  46. p = Permission.objects.get(codename=ps[1], content_type__app_label=ps[0])
  47. except:
  48. raise CustomError(u"权限配置错误!")
  49. raise CustomError(u"您没有[%s-%s]权限,无法执行该操作,请联系管理员分配权限!" % (p.content_type.name, p.name))
  50. return _function