如果我有这样的模型......
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/