问题 在Django中使用用户角色


我有一些问题 在一个项目中,我需要与三个(可能更多)类型的用户一起工作,这些用户具有不同的角色: 医师 患者 管理员

我一直在考虑使用Django Model Users并扩展它,创建一个userprofile模型...... 但我忽略了如何管理不同的角色,因为userprofile模型将包含用户模型的字段,尽管我不知道如何解决角色主题。

1用户有多个用户配置文件?我不知道

或者我可能会在我指定角色类型并创建与用户模型的关系的位置创建角色模型/表。这是一个很好的可能性。

另一种可能性(作为下面的评论)是检查Django权限系统,我可以在其中创建用户组,并为这些组分配权限,虽然在这里我只能编辑,创建和删除模型吗?

我对如何解决这个问题感到困惑

搜索我找到了这个应用程序。 https://github.com/dabapps/django-user-roles

如果有人可以指导我,我将非常感激 最好的祝福


11331
2017-10-30 21:40


起源

Django的用户角色 是在4年前完成的,并没有更新。看起来它是为Django 1.3制作的。我不建议使用它。 - Andrés Pérez-Albela H.
这是真的安德烈斯。我目前正在考虑其他选项,其中包括模型用户定制。谢谢你的澄清 - bgarcial
我的荣幸!我也会考虑这个问题: docs.djangoproject.com/en/1.8/topics/auth/default/... - Andrés Pérez-Albela H.


答案:


您可能可以使用django的内置工具 权限

这可能比你需要的更多。一个简单的解决方案就是UserProfile模型,其中包含一个带有OneToOneField的角色字段给您的用户:

class UserProfile(models.Model):
  user = models.OneToOneField(User, related_name="profile")
  role = models.CharField()

设置角色并对视图中的角色进行检查:

user.profile.role = "physician"
user.profile.save()

if user.profile.role == "physician":
  #do physician case here

13
2017-10-30 22:13



嗨@sponrad我一直在探索,并且,UserProfile模型通常用于向用户模型添加额外信息或额外属性,而我没有修改用户模型...例如,向用户添加头像图片。 ..根据这种想法,如果我们谈论模型或数据结构,UserProfile与UserRole不同。你同意吗?我认为我可以创建一个UserRole模型,我可以说一个用户有很多UserRoles ......例如...... - bgarcial
另一种方法是研究Django中的权限系统(您在上面提到过),我可以看到创建组并分配权限或权限并将其分配给用户的可能性。每个小组都可以成为一个角色?这是可能的。 - bgarcial
名称“UserProfile”是任意的,该表表示您想要绑定到用户的任何信息,无论是个人资料图片,生日,角色等等。 - sponrad
如果您的角色系统更复杂,那么您可以继续将角色作为自己的模型。如果一个人可以拥有多个角色,或者您需要存储有关人员角色的信息,这将更有效。例如,某人是某人的管理员,但除了声明他们是管理员之外,您还要存储一系列关于其特定管理员角色的字段,这些字段属于自己的表。 - sponrad
为此,您可能需要创建一个继承自UserCreationForm的新自定义表单,并将所需的字段添加到表单中。我在我的一个应用程序中执行此操作,这是另一个示例stackoverflow问题,它显示了一个示例。 stackoverflow.com/questions/5745197/...。您可以在视图中访问添加到表单的字段。 - sponrad