当前位置:  开发笔记 > 编程语言 > 正文

Django上的用户角色架构

如何解决《Django上的用户角色架构》经验,为你挑选了1个好方法。

一个伟大的问候社区

我的问题与Django中的管理用户和架构用户的类型有关,一开始我请你道歉,以防万一我的问题可能太"新手"或没有意义,我开始把我与Django联系起来用户模式及其在项目中的不同工作可能性.

我有以下情况.

我正在构建一个应用程序,其中我将有三个不同的用户类型:

患者

物理治疗师

我使用默认的Django身份验证方案(django.contrib.auth).

最初,我确实在这个实体方案中思考,其中User表是auth_userDjango保存用户创建的表:

架构思考(不好 - ?)

我有is_patient,is_medicalis_physiotherapist用户表中的布尔属性字段.

像特定细节一样,我理解在Django默认模型中,用户无法修改或添加属性或字段.

这是一个重要而有力的理由我不能添加的 is_patient,is_medical并且is_physiotherapist在用户表布尔字段.

经典建议是使用Userprofile表扩展User模型,在该表中我通过OneToOne关系向User Model添加字段或属性.基本样本如下:

扩展Django用户模型

就是这样,我得到了我在Django的用户可以拥有现场照片并在特定时刻上传一个...

利用前面的方案,以下模式可以适用于管理用户角色(和用户类型)patient,也可以作为替代方案?medicalphysiotherapist

其他架构也是如此

我会在以下方面建立关系:

用户医疗和用户患者

用户物理治疗师和用户患者

他们和其他桌子之间......

通过这种方法,这些关系不会受到影响吗?

将在Users和UserProfile表之间保存不同的用户.这是可扩展性意义上的一个好习惯吗?我的表可能是崩溃还是我的数据库?


此外,我还看到了其他替代方案,例如:

    角色表/模型

我将有一个独立或独立的角色表/模型,这可以与Django用户模型相关(一个用户可以通过示例拥有许多角色)当我想要存储有关特定角色的角色的独家信息时,这种方法非常有用?

    Django权限和授权

我忽略或不知道让我工作的粒度等级.我只看到权限和授权系统允许我使用创建,编辑和删除操作....

在这里,我可以看到创建群组吗?例如,医疗组并为其分配权限并将此权限链接到组成该组的用户?这是另一个好的选择吗?这个选项似乎更单一,虽然我不知道用户是否可以根据具有的组权限进行一些操作...我不知道这个想法是否正确/正确

    AUTH_USER_MODEL 创建自定义用户模型

我对患者,医疗和物理治疗师用户的要求需要构建自定义用户模型吗?



1> Ire..:

在这种情况下,特别是如果您想为患者,医务人员和物理治疗师存储不同的信息,您可以为每个人创建一个模型,并为每个用户模型设置一个OneToOne字段.

class Medic(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    # other fields

class Physio(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    # other fields

class Patient(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    # other fields

这样,您就可以给不同的权限/隐含的角色在你的应用程序逻辑为每种类型的用户(和仍然使用组和权限的Django的提供,如果你需要他们的特殊情况下,例如ChiefMedical ...).

您必须为您的应用程序逻辑定义一些方法

def user_is_patient(user):
     ...

如果您遵循这条路径,最好进行良好的测试,以确保您不会出现意外的事情,例如Medic和Physio的用户......

Django还允许您为用户模型创建子类.在封面下,它将与上面的代码做同样的事情,因此最好如上所示明确地执行此操作(这样,您访问该对象中不存在的属性的可能性较小!)

利用前面的方案,以下模式可以适用于或可以作为管理用户角色(患者,医疗和物理治疗师用户类型)的替代方案?

您显示的架构不是很好,因为它使您可以在同一个表中存储所有用户类型的信息(并使用相同的字段).例如,Medics和Physios将具有类似患者的血型字段类型,可能不会被定义.

将在Users和UserProfile表之间保存不同的用户.这是可扩展性意义上的一个好习惯吗?我的表可能是崩溃还是我的数据库?

此解决方案应该没有可伸缩性问题(只要您每天没有数百万个新条目写入),并且您可以随时优化数据库.但是,您必须确保您的应用不接受"禁止"条目(例如,没有Medic,Physio或Patient个人资料的用户)

在这里,我可以看到创建群组吗?例如,医疗组并为其分配权限并将此权限链接到组成该组的用户?这是另一个好的选择吗?这个选项似乎更单一,虽然我不知道用户是否可以根据具有的组权限进行一些操作...我不知道这个想法是否正确/正确

您可以(应该)使用Django的权限系统为您的用户授予权限.您可以使用它们为相同类型的用户提供不同的权限(例如,具有比其他用户更多权限的Medics ...或者具有主要物理组的组...)

Django允许您为组分配权限.

但我不认为组可以替换每个用户的自定义模型,因为您希望为它们存储信息.拥有自定义模型和组将是多余的,并使您的应用程序更难维护.

我对患者,医疗和物理治疗师用户的要求需要构建自定义用户模型吗?

此选项不会很好(除非它是您唯一的选择),因为您的应用程序将无法重复使用,并且您可能也遇到某些程序包的问题.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有