Хранение и вычисление разрешений в Django Rest Frame Frameword - PullRequest
0 голосов
/ 04 мая 2020

Предположим, в приложении есть модель «Сервис». Существует также модель «Заказы», ​​которая заботится о покупках «Пользователя».

class Service(models.Model):
  name = models.CharField(max_length=10)

class Order(models.Model):
  service = models.ForeignKey(Service)
  user = models.ForeingKey(get_user_model())


Мой вопрос заключается в том, что лучше при проверке доступа пользователя к услуге:

A> Хранение и использование разрешений для каждого объекта (сохраненных в другой таблице) с помощью сторонних библиотек, таких как Django guardian.

B> Вычисление разрешения для каждого запроса. Пример Разрешить, если пользователь купил эту услугу (см. Код ниже)

class IsPaidCustomer(BasePermission):
   message = 'This action is allowed only for paid Customers.'

    def has_permission(self, request, view):
        course = request.data.get('service')
        return bool(
            request.user.order_set.filter(service__id=service).exists()
        )

Имеет ли смысл A. только в случае больших вычислений? Или есть какое-то другое преимущество хранения этих разрешений?

...