首页 文章

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

提问于
浏览
2

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

为了阐明,说有三种类型的用户:教师,助教和学生 . TA将能够创建一个新的'Assignment',教师将能够'review'并确认它,学生将不得不'review'和TA最终可以检查那些'reviewed'解决方案 . 现在有三种类型的用户: TA 谁可以创建分配和等级解决方案, Faculty 谁可以查看分配和解决方案以确认它们, Students 谁可以提交解决方案 .

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

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

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

1 回答

  • 1

    如果创建子类,主类将自动实例化,因此更方便 . 如果您创建了一个配置文件类,则需要手动实例化这两个类 .

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

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

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

    • subject(试图创建,访问或编辑内容的用户或组)

    • object(动作的目标)

    • 所有者(对象的所有者)

    • 角色(主题与对象或对象所有者之间的关系)

    • 权限(定义允许哪些角色执行哪些操作的规则)

相关问题