簡體   English   中英

在Django中處理多種類型的用戶的最佳方法

[英]Best way to handle multiple type of users in Django

在我的項目中,我必須處理不同類型的用戶,例如客戶雇主 每種類型的用戶都有自己的字段和權限:客戶可以購買商品,而雇主不能。

我已經閱讀了Django文檔,並且看起來有兩個選擇:

  1. AbstractUser類進行匯總,並添加客戶和雇主的所有字段。 然后,使用權限系統授予/撤消權限,或為每種類型的用戶創建一個組。 這里的缺點是有未使用的字段。
  2. 采用代理模式

     from django.contrib.auth.models import User from django.db import models 

    \n\n

    Costumer(models.Model)類:user = models.OneToOneField(User,on_delete = models.CASCADE)

    \n\n
     class Meta: db_table = 'costumers' permissions = ( ("access_this", "User may access this"), ) ordering = [] 
    \n\n

    Employee類(models.Model):user = models.OneToOneField(User,on_delete = models.CASCADE)

    \n\n
     class Meta: db_table = 'employers' permissions = ( ("access_that", "User may access that"), ) ordering = [] 
    \n\n

    這種情況似乎更合理,但我不知道如何處理權限。 考慮一下,我想使用@permission_required而不是檢查類型(如果用戶具有特定字段),因為這對於Django系統而言似乎更合法。

那么,最后,解決這種情況的最佳方法是什么?

第一個解決方案要好得多。

這里的缺點是有未使用的字段。

我不同意這一點,您不必在User模型中存儲所有字段。 另外,如果您要談論的是5個領域,那也沒關系。


您可以擴展AbtractUser ,也可以使用一些組合。 您不必將所有字段都放在這里:

class User(AbstractUser):
     email = ...
     ...
     # for the employer, let's say you want to save the company details
     company = models.ForeignKey('myapp.Company', null=True, blank=True)
     ...
     # for the customer
     customer_details = models.ForeignKey('...')

這樣,您可以記錄一個user_type如果您想要或從外鍵推導該類型(如果有公司,則是雇主)。


為了在模型方面為您提供更多幫助,我需要知道在您的應用程序中雇主與客戶有何區別。 請注意,使用該解決方案, User的實例可以是兩者。


關於權限,我覺得這是一個單獨的問題。 我建議您將其排序。 如果您選擇的設計接近現實,並且您可以使用功能; 添加自定義權限將非常容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM