如何在Django中实现两个身份验证层

时间:2019-05-13 20:46:45

标签: django database authentication django-models login

我有一个用于企业的Web应用程序。登录后,用户(企业经理)可以查看包含其企业信息的表。

Masterp中的

userID 1-> *行,

ForecastTable中的

userID 1-> *行

我需要更改它,以便多个企业的所有者可以登录特定企业的帐户并编辑经理可以使用的相同信息。

我正在考虑将数据库架构更改为以下形式: MasterID中的userID - businessID 1- *行,ForecastTable中的行

我应该有2个登录页面,首先是userID,然后是businessID。然后,数据库中的所有列都仅引用businessID,因此不同的用户可以编辑相同的数据。

还是相同的登录表单使用户输入了一个businessID和他们的用户名,然后根据他们输入的businessID来登录该页面?

我不确定实现这样的最佳实践是什么。

这是我的Django模型的样子:

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

class MasterEntry(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date = models.DateField()
    cutoff1 = models.IntegerField(default=0)
    cutoff2 = models.IntegerField(default=0)
    rooms_sold = models.IntegerField(default=0)
    is_blackout = models.BooleanField(default=False)

class ForecastEntry(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date = models.DateField()
    rate = models.IntegerField(default=0)

用户有数百个“主条目”和“预测条目”行。我在数据库中查询行并在前端创建一个表。

1 个答案:

答案 0 :(得分:0)

您不需要两层身份验证。

例如,非管理员用户只能查看其拥有的业务,这可以通过在显示上述业务列表的视图中使用简单的过滤器来实现。

您可以将每个公司名称呈现为链接,然后在其中显示MasterEntry的列表。

更多的是信息布局问题。

结论:

  1. 仅显示业务属于已认证用户的页面。
  2. 超级用户可以看到所有业务。
  3. 您可以单击一个业务条目以查看/编辑/删除它包含的任何MasterEntry