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/ вы можете проверить эту ссылку!

Вернуться на верх