如何扩展Django User模型来管理权限

时间:2011-11-01 05:29:00

标签: django django-models django-authentication django-users

我正在使用Django 1.3和Python2.6开发一个网络应用程序。我必须扩展Django User模型,以便有三种类型的用户和每种类型的管理权限。

为了阐明,说有三种类型的用户:教师,助教和学生。 TA将能够创建一个新的“作业”,教师将能够“审核”并确认它,学生提交'解决方案,教师必须'审核',并且TA最终可以检查那些“已审核”的解决方案。现在有三种类型的用户:TA谁可以创建Assigments和成绩解决方案,Faculty谁可以审核分配和解决方案以确认它们,以及Students谁可以提交解决方案。

现在,我了解扩展User模型有两种方法。我可以创建一个UserProfile并添加一个名为“user_type”的字段。其他方法是子类User模型。我认为子类化是一种更好的方法,因为有些字段因不同类型的用户而异。

我将有一个登录表单,但可以为不同类型的用户提供不同的注册表单。你为什么要选择其中一种方法?

我知道管理不同类型用户权限的最佳方法是通过用户组。如何创建组,检查用户是否属于某个组?选择如何扩展用户模型会影响我管理权限的方式吗?

1 个答案:

答案 0 :(得分:1)

如果创建子类,主类将自动实例化,因此更方便。如果你创建了一个profile类,你需要手动实例化这两个类。

对于简单的情况,您可能需要在允许操作之前检查用户类型。您可以使用内置permissions backends of Django

无论是子类还是创建配置文件类,都不会对组工作流程产生太大影响。组和用户之间始终存在ManyToMany关系。但是,最好在User和Group类之间进行,而不是在UserProfile和Group之间进行。

如果您计划一个更大的项目,我可以简要描述一个权限框架必须定义的内容:

  • 主题(试图创建,访问或编辑某些内容的用户或组)
  • 对象(动作的目标)
  • 所有者(对象的所有者)
  • 角色(主体与对象或对象所有者之间的关系)
  • 权限(定义允许哪些角色执行哪些操作的规则)