如果我有这样的模特..
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),但我不知道文档在那里说什么,而且他们没有很好地解释它。
我还可以想到可能在用户模型上添加一个字段并检查其值,但是这样做是错误的...
答案 0 :(得分:1)
我可以想象两种方法来实现你想要的东西,但那是实验性的,我不知道它是否会遵循良好的做法:
代号部分基于实例。 例如,使用包含用户可以编辑的实例的代号创建权限:
docker network create net
docker run -d --net=web -v /var/www/:/usr/share/nginx/html nginx:1.9
docker run -d -p 80:80 --net=web haproxy
然后:
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)):
然后只需添加和删除用户可在其class myModel(models.Model):
editors = models.ManyToManyField(User, related_name='mymodel_can_edit')
字段中删除的实例,就像管理其mymodel_can_edit
字段中的权限一样。
但我没有测试任何这些解决方案。 如果你尝试一下,你可以告诉你对它的看法吗? :)
答案 1 :(得分:0)
您可以使用提供此功能的django模块。
我个人使用django-guardian,它使用类似于原始has_perm
方法的界面提供每个对象的权限。