[英]Best way to handle multiple type of users in Django
在我的項目中,我必須處理不同類型的用戶,例如客戶和雇主 。 每種類型的用戶都有自己的字段和權限:客戶可以購買商品,而雇主不能。
我已經閱讀了Django文檔,並且看起來有兩個選擇:
AbstractUser
類進行匯總,並添加客戶和雇主的所有字段。 然后,使用權限系統授予/撤消權限,或為每種類型的用戶創建一個組。 這里的缺點是有未使用的字段。 采用代理模式 :
這種情況似乎更合理,但我不知道如何處理權限。 考慮一下,我想使用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\n\nclass Meta: db_table = 'costumers' permissions = ( ("access_this", "User may access this"), ) ordering = []
Employee類(models.Model):user = models.OneToOneField(User,on_delete = models.CASCADE)
\n\n\n\nclass Meta: db_table = 'employers' permissions = ( ("access_that", "User may access that"), ) ordering = []
@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.