permissions.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from ipaddress import IPv4Address, IPv4Network
  2. from rest_framework import permissions
  3. class IsOwner(permissions.BasePermission):
  4. """
  5. Custom permission to only allow owners of an object to view or edit it.
  6. """
  7. def has_object_permission(self, request, view, obj):
  8. return obj.owner == request.user
  9. class IsDomainOwner(permissions.BasePermission):
  10. """
  11. Custom permission to only allow owners of a domain to view or edit an object owned by that domain.
  12. """
  13. def has_object_permission(self, request, view, obj):
  14. return obj.domain.owner == request.user
  15. class IsVPNClient(permissions.BasePermission):
  16. """
  17. Permission that requires that the user is accessing using an IP from the VPN net.
  18. """
  19. message = 'Inadmissible client IP.'
  20. def has_permission(self, request, view):
  21. ip = IPv4Address(request.META.get('REMOTE_ADDR'))
  22. return ip in IPv4Network('10.8.0.0/24')
  23. class ManageTokensPermission(permissions.BasePermission):
  24. def has_permission(self, request, view):
  25. return request.auth.perm_manage_tokens
  26. class WithinDomainLimitOnPOST(permissions.BasePermission):
  27. """
  28. Permission that requires that the user still has domain limit quota available, if the request is using POST.
  29. """
  30. message = 'Domain limit exceeded. Please contact support to create additional domains.'
  31. def has_permission(self, request, view):
  32. if request.method != 'POST':
  33. return True
  34. return request.user.limit_domains is None or request.user.domains.count() < request.user.limit_domains