Django - Ограничение доступа к API по геолокации
У нас есть модель и представление:
from django.db import models
from rest_framework.decorators import api_view
from rest_framework.response import Response
class Store(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
@api_view(['get'])
def get_checklist_by_store_id(request, store_id):
# request.user should has access to this view only when request.user inside the store with id=store_id
return Response()
Пользователь может получить контрольный список по идентификатору магазина. И нам нужно ограничить доступ к представлению get_checklist_by_store_id и позволить пользователю иметь доступ только тогда, когда пользователь находится внутри магазина с id=store_id.
Сначала я подумал о том, чтобы добавить в модель Store поле с геокоординатами. Затем на фронтенде реализовать API геолокации. Когда пользователь пытается получить доступ к представлению, попросить его включить геолокацию и, наконец, послать запрос с его геокоординатами. А в представлении сравнивать геокоординаты пользователя и хранить геокоординаты (с некоторой погрешностью в расстоянии).
Может быть, есть другой подход к решению такого рода проблемы?
попробуйте сделать ограничение api на уровне nginx, а не django! https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-by-geoip/ вы можете проверить эту ссылку!