permissions.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from rest_framework.permissions import BasePermission
  2. class ScopedPermission(BasePermission):
  3. """
  4. Check if view has scope_map and compare it with request's auth scope map
  5. Fall back to checking for user authentication
  6. """
  7. def get_allowed_scopes(self, request, view):
  8. try:
  9. return self.scope_map[request.method]
  10. except KeyError:
  11. return {}
  12. def has_permission(self, request, view):
  13. if request.auth:
  14. allowed_scopes = self.get_allowed_scopes(request, view)
  15. current_scopes = request.auth.get_scopes()
  16. return any(s in allowed_scopes for s in current_scopes)
  17. return bool(request.user and request.user.is_authenticated)
  18. def get_user_scopes(self, obj, user):
  19. pass
  20. def has_object_permission(self, request, view, obj):
  21. allowed_scopes = self.get_allowed_scopes(request, view)
  22. current_scopes = self.get_user_scopes(obj, request.user)
  23. return any(s in allowed_scopes for s in current_scopes)
  24. class UserOnlyPermission(BasePermission):
  25. """
  26. Authentication method disallows tokens. User must be logged in via session.
  27. """
  28. def has_permission(self, request, view):
  29. if request.auth:
  30. return False
  31. return bool(request.user and request.user.is_authenticated)