Предположим, в приложении есть модель «Сервис». Существует также модель «Заказы», которая заботится о покупках «Пользователя».
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. только в случае больших вычислений? Или есть какое-то другое преимущество хранения этих разрешений?