我正在使用django-userena应用程序来处理用户注册,用户配置文件和登录。现在我正在编写一个应用程序 -
一种方法是 - 创建两个组创建者和修饰符。现在创建者组可以编辑课程页面,修改者的成员可以修改该特定课程的作业。这个解决方案的问题是,一旦我们将用户添加到创建者组,它就会自动获得编辑所有课程的权限。类似地,修饰符组的成员可以编辑所有课程的所有作业。这不是必需的。
我应该如何构建这个应用程序?
答案 0 :(得分:1)
另一种选择是django-authority,它可以通过方法动态检查权限,而不是将它们保存在数据库中。
Django-guardian的区别在于,在您的示例中,当用户移动到另一个课程时,您必须取消分配旧组的权限并明确指定新组。
使用权限,函数can_edit_course(user, course)
(伪代码)和在运行时决定的访问。
答案 1 :(得分:0)
您基本上想要的是行级权限。
您可以从row level permissions in django
获得一些想法其他方式是您可以在模型Course
上保留两个字段..
class Course(models.Model):
creator = models.ForeignKey(User)
modifiers = models.ManyToManyField(User)
因此,检查用户是否是创建者,然后只允许编辑课程。
检查用户是否在course.modifiers.all()
,然后允许他修改。
创作者可以访问另一个页面,在那里可以添加课程的修饰符。
答案 2 :(得分:0)
您可以为每个课程附加两个不同的组,并在创建课程时创建它们:
class Course(models.Model):
creators = models.ForeignKey(Group)
modifiers = models.ForeignKey(Group)
所以这样你就可以为这个群体设定一个感情。您可以使用django-guardian分配和检查此权限。 像这样:
assign_perm('edit_course', group, course)
然后检查用户是否可以编辑此课程(它将自动检查用户组的组权限)
user.has_perm("edit_course",course)