Предположим, у меня есть следующие модели:
from django.db import models
class Environment(models.Model):
name = models.CharField(max_length=30, unique=True)
class Device(models.Model):
# (some other fields)
environment = models.ForeignKey(Environment, on_delete=models.CASCADE)
Также есть два "уровня доступа":
root
: пользователи с этим уровнем могут редактировать и удалятьDevices
regular_user
: пользователи с этим уровнем могут просматривать Devices
Каждый пользователь для указанного Environment
должен иметь либо уровень разрешения root
, либо regular_user
т.е.в среде A он может быть root
, а в среде B - regular_user
.
. Для указания того, что пользователь имеет определенный уровень разрешений для выбранной среды, я использую решение, описанное здесь (<permission_level_name>:<environment_id>
, например: root:1
).Это может быть изменено, если это поможет решить проблему.
Пользователь обращается к данным через API на основе Django REST Framework.
Как запретить пользователю использовать root
уровень разрешений в среде A для редактирования (через API) Devices
, которые находятся в среде B, где он имеет regular_user
уровень разрешений?
Решения типа django-guardian
позволяют назначать разрешения для * 1039Разрешения * instance и Django позволяют назначать разрешения для каждой модели, но мне нужна система разрешений, основанная на свойстве Device
instance.