gpt4 book ai didi

python - Django 上的用户角色架构

转载 作者:太空狗 更新时间:2023-10-30 00:35:27 26 4
gpt4 key购买 nike

一个很棒的问候社区

我的问题与 Django 中管理用户和模式用户的类型有关,一开始我向您道歉,以防万一我的问题太“新手”或没有意义,我开始与我联系与 Django 用户模式及其在项目中的不同工作可能性。

我有以下情况。

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

  • 医疗
  • 患者
  • 物理治疗师

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

最初,我确实认为在这种实体方案中,用户表是 Django 保存创建的用户的 auth_user 表:

Schema thinked (bad  - ?)

我在用户表中有 is_patientis_medicalis_physiotherapist 字段,如 bool 属性。

像一个特定的细节,我知道在 Django 默认模型中,用户不可能修改或添加属性或字段。

这是我无法在 User 表中添加 is_patientis_medicalis_physiotherapist bool 字段的一个重要而有力的原因。

一个经典的建议是使用 Userprofile 表扩展用户模型,我在其中通过 OneToOne 关系向用户模型添加字段或属性。基本示例如下:

Extending Django users model

通过这种方式,我可以让 Django 中的用户拥有实地照片并在给定时刻上传一张 ...

利用之前的优势,以下模式适合或可以替代管理用户角色(patientmedicalphysiotherapist 用户类型)?

Other schema thinked

我将有以下关系:

  • 用户医疗和用户患者

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

所以在它们和其他表之间......

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

不同的用户将保存在Users 和UserProfile 表之间。从可扩展性的角度来看,这是一个好的做法吗?我的表可能崩溃或我的数据库?


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

  1. 角色表/模型

我将有一个独立或独立的角色表/模型,这可以与 Django 用户模型相关(例如,一个用户可以有多个角色)当我想存储有关 specia 角色的独有信息时,这种方法会很有用吗?

  1. Django Permissions and Authorization

我忽略或不知道让我工作的粒度等级。我已经看到权限和授权系统让我以一种方式进行创建、编辑和删除操作....

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

  1. AUTH_USER_MODEL Creating a Custom User model

我对患者、医疗和理疗师用户的要求是否需要构建自定义用户模型?

最佳答案

在这种情况下,特别是如果您想为患者、医生和物理治疗师存储不同的信息,您可以为每个人创建一个模型,并为每个用户模型创建一个 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 还允许您对用户模型进行子类化。在幕后它会做与上面代码相​​同的事情,所以最好像上面所示那样明确地做它(这样你就不太可能访问该对象中不存在的属性!)

Taking advantage of the previous, The following schema can be suited or can be an alternative for manage user roles (patient, medical and physiotherapist user types) ?

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

The different users will be saved between the Users and UserProfile table. Is this a good practice in the scalability sense? My tables could be crash or my database?

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

Here, can I see the groups creation? For example a medical group and allocate them permissions and linked this permissions to the users that compose the group ? Is this another good alternative? This option seem more single although I don't know if an user could make some operations according to the group privileges that have ... I don't know if this thinking is correct/right

您可以(应该)使用 Django 的权限系统来为您的用户授予权限。您可以使用它们为同一类型的用户授予不同的权限(例如,拥有比其他人更多权限的医生......或者拥有首席理疗师组......)

Django 允许您为组分配权限。

但我认为组不能取代每个用户的自定义模型,因为您要为他们存储信息。拥有自定义模型和组将是多余的,并且会使您的应用更难维护。

My requirements for patient, medical and physiotherapist users, require build a custom user model?

此选项不会很好(除非它是您唯一的选择),因为您的应用程序将不可重用,并且您可能还会遇到某些软件包的问题。

关于python - Django 上的用户角色架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34213066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com