decorators.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #coding=utf-8
  2. from django.views.decorators.csrf import csrf_exempt
  3. from django.utils.functional import wraps
  4. from libs.http import ForbiddenJSONResponse
  5. from apps.exceptions import CustomError
  6. from .tokens import token_generator
  7. from .models import User
  8. def token_required(view_func):
  9. """Decorator which ensures the user has provided a correct user and token pair."""
  10. @csrf_exempt
  11. @wraps(view_func)
  12. def _wrapped_view(request, *args, **kwargs):
  13. user_id = request.META.get('HTTP_USER_ID')
  14. token = request.META.get('HTTP_ACCESS_TOKEN')
  15. if user_id and token:
  16. try:
  17. user = User.objects.get(pk=user_id)
  18. except:
  19. return ForbiddenJSONResponse()
  20. valid = token_generator.check_token(user, token)
  21. if valid:
  22. request.user = user
  23. return view_func(request, *args, **kwargs)
  24. return ForbiddenJSONResponse()
  25. return _wrapped_view
  26. decorator_with_arguments = lambda decorator: lambda *args, **kwargs: lambda func: decorator(func, *args, **kwargs)
  27. @decorator_with_arguments
  28. def permission_required(function, perm):
  29. def _function(request, *args, **kwargs):
  30. user_id = request.META.get('HTTP_USER_ID')
  31. token = request.META.get('HTTP_ACCESS_TOKEN')
  32. if user_id and token:
  33. try:
  34. user = User.objects.get(pk=user_id)
  35. except:
  36. return ForbiddenJSONResponse()
  37. valid = token_generator.check_token(user, token)
  38. if valid:
  39. request.user = user
  40. else:
  41. return ForbiddenJSONResponse()
  42. if request.user.has_perm(perm):
  43. return function(request, *args, **kwargs)
  44. else:
  45. from django.contrib.auth.models import Permission
  46. from libs.http import JSONError
  47. ps = perm.split('.')
  48. try:
  49. p = Permission.objects.get(codename=ps[1], content_type__app_label=ps[0])
  50. except:
  51. return JSONError(u"权限配置错误!")
  52. return JSONError(u"您没有[%s-%s]权限,无法执行该操作,请联系管理员分配权限!" % (p.content_type.name, p.name))
  53. return _function
  54. def valid_permission(user,perm):
  55. if user.has_perm(perm):
  56. return
  57. from django.contrib.auth.models import Permission
  58. ps = perm.split('.')
  59. try:
  60. p = Permission.objects.get(codename=ps[1], content_type__app_label=ps[0])
  61. except:
  62. raise CustomError(u"权限配置错误!")
  63. raise CustomError(u"您没有[%s-%s]权限,无法执行该操作,请联系管理员分配权限!" % (p.content_type.name, p.name))
  64. def isHasPermissions(user, perm):
  65. if user.has_perm(perm):
  66. return True
  67. return False