2

我正在使用django-userena应用程序来处理用户注册、用户配置文件和登录。现在我正在编写一个应用程序,其中 -

  1. 用户可以创建课程(课程就像我们存储课程信息的个人资料)。
  2. 其他用户可以注册此课程。注册需要课程创建者的批准。
  3. 只有课程创建者可以编辑课程页面,并且他可以为课程创建作业。
  4. 所有注册课程的用户都可以看到课程页面和课程分配(只读)。
  5. 课程创建者可以向其他用户提供编辑课程所有作业的权限。

一种出路是——创建两个组创建者和修改者。现在创建者组可以编辑课程页面,修改者的成员可以修改该特定课程的分配。这个解决方案的问题是,一旦我们将用户添加到创建者组,它会自动获得编辑所有课程的权限。同样,修改组的成员可以编辑所有课程的所有作业。这不是必需的。

我应该如何构建这个应用程序?

4

3 回答 3

1

另一种方法是django-authority,它可以通过方法动态检查权限,而不是将它们保存在 DB 中。

在您的示例中,Django-guardian 的区别在于,当用户转到另一门课程时,您必须取消对旧组的权限并明确分配新组。

有了权限,一个函数can_edit_course(user, course)(伪代码)和访问在运行时决定。

于 2014-02-06T03:11:55.950 回答
0

您基本上想要的是行级权限。

您可能会从django 中的行级权限中得到一些想法

另一种方法是您可以在模型上保留两个字段Course..

class Course(models.Model):
    creator = models.ForeignKey(User)
    modifiers = models.ManyToManyField(User)

因此,请检查用户是否是创建者,然后只允许编辑课程。

检查是用户在course.modifiers.all(),然后允许他修改。

创建者将有权访问另一个页面,可以在其中为课程添加修饰符。

于 2013-04-26T11:20:56.720 回答
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)
于 2013-04-26T11:42:40.967 回答