python - Django 如何定义权限以便用户只能编辑某些模型层次结构?

标签 python django permissions user-permissions

如果我有这样的模型......

class Family(Model):
    name = models.CharField()

class Father(Model):
    family = ForeignKey(Family)

class Mother(Model):
    family = ForeignKey(Family)

class Child(Model):
    family = ForeignKey(Family)

Django 会自动设置组权限,因此我可以定义可以编辑/创建/等等的组...家庭模型。

如何限制它只允许用户编辑家庭模型的某个实例?因此,如果我希望“Johnson”家族管理员仅有权编辑“Johnson”家族树下的内容。

我可以想到两种方法,一种是定义自定义权限,例如 ( https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#custom-permissions ),但我不知道文档在那里说了什么,而且他们没有很好地解释它。

我也可以考虑在用户模型上添加一个字段并检查它的值,但这样做感觉不对......

最佳答案

我可以想象有两种方法可以实现你想要的,但那是实验性的,我不知道它是否会遵循良好的做法:

1 - Programmatically created permissions :

代号部分基于实例。 例如,使用包含用户可以编辑的实例的代号创建权限:

perm = Permission.objects.create(codename='can_create_'+str(obj.id),
                                 name='can edit instance with id ' + str(obj.id))
user.user_permissions.add(perm)

然后:

if user.has_perm('can_create_' + str(relevant_id)):

2 - ManyToMany relationships as permissions :

可能是您自己的实地想法:

class myModel(models.Model):
    editors = models.ManyToManyField(User, related_name='mymodel_can_edit')

然后只需添加和删除用户可以在其 mymodel_can_edit 字段中删除的实例,就像您在其 user_permissions 字段中管理权限一样。

但我没有测试任何这些解决方案。 如果你尝试一下,你能说说你的想法吗? :)

关于python - Django 如何定义权限以便用户只能编辑某些模型层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39404451/

相关文章:

python - 来自 Google Vision API OCR 的响应 400,带有指定图像的 base64 字符串

django - 配置 Django 和 Google Cloud Storage?

sql-server - FN_TRACE_GETTABLE 上的 SQL Server EXECUTE AS

python - 在小于 O(n) 的时间内找到小于给定数字的斐波那契和

python - 如何计算 YAML 中定义的代数表达式?

python - django 多对多问题

django - 也停止运行测试的抽象 django.test TestCase 类

java - ZooKeeper删除权限强制理解

azure - 使用 Azure AD B2C 管理权限

python - 如果向前的前 4 位数字等于向后的最后 4 位数字,则检查数字