假设我具有以下模型:
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
。
为了指定用户对所选环境具有一定的权限级别,我使用描述的解决方案here(<permission_level_name>:<environment_id>
,例如:root:1
)。如果这有助于解决问题,则可以更改此主题。
用户通过基于Django REST Framework的API访问数据。
如何阻止环境A中拥有root
权限级别的用户在环境A中拥有Devices
权限的用户(通过API)编辑regular_user
? / strong>
诸如django-guardian
之类的解决方案允许为每个Device
实例分配权限,而Django Permissions允许为每个Model分配权限,但是我要寻找的是基于Device
实例的属性的权限系统。
答案 0 :(得分:0)
您应该可以使用dry-rest-permissions解决问题,它可以对权限,操作等进行细粒度的控制
示例:
class Device(models.Model):
# (some other fields)
environment = models.ForeignKey(Environment, on_delete=models.CASCADE)
def has_object_write_permission(self, request):
return self.environment.is_root(request.user)