【问题标题】:Django - Multi-tenant architecture. How to create multiple users for a single appDjango - 多租户架构。如何为单个应用创建多个用户
【发布时间】:2020-10-11 13:56:38
【问题描述】:
myproject
 |- myapp

我创建了一个 django 项目,其中有一个应用程序可以查看、将数据添加到数据库等。现在我想创建多个用户,他们可以将这个应用程序与他们自己的数据一起使用。最好的方法是什么。

假设有 3 个用户 user1、user2、user3。用户 1 为公司 1 工作 用户 2 为公司 2 工作,用户 3 为公司 3 工作。所以每个用户都有自己的数据。

目前我正计划这样做。 我复制 myapp 代码并为每个用户创建 3 个应用程序。所以项目目录看起来是这样的

myproject
  |- myapp
  |- myappuser1
  |- myappuser2
  |- myappuser3

所以我现在有 3 个具有相似功能的应用程序,每个用户都有自己的数据。现在,障碍是我如何限制访问,以便每个用户都可以看到自己的应用程序。例如,user1 应该只能看到 myappuser1 的内容,而 user2 应该只能看到 myappuser2 的内容。我怎样才能做到这一点 ?我尝试在 django admin 中创建组,但这仅授予我编辑对 myapp 下模型的访问权限的权限。它不限制用户查看其他用户的页面。

选项 2: 为每个用户创建单独的 django 项目。这解决了用户限制,但要在 heroku 中部署,我应该将每个注册为一个应用程序,然后我必须创建一个唯一的登录页面,每个客户都可以通过该页面登录,否则我必须为每个用户提供不同的登录 url。

请问有没有更好的办法?

【问题讨论】:

  • 如果三个用户是指三种不同类型的用户,那么实施基于角色的访问可能会有所帮助。
  • 不基于角色。假设他们来自不同的公司。
  • 您想构建多租户架构吗?此外,如果用户和他们想要访问的应用程序之间没有重叠,为什么不创建单独的项目?
  • 感谢您的支持。是的多租户。用户将使用几乎相同的应用程序,但数据不同。选项 2 是创建不同的项目,但随后我遇到了部署问题,例如在 heroku 中,我为一位客户创建了一个 heroku 应用程序
  • 具有不同数据的相同应用程序:听起来就像任何其他 Web 应用程序。根据谁登录进行查询,只显示与他们相关的信息。

标签: django multiple-users


【解决方案1】:

如果您确实在寻找多租户架构,我建议您查看库django-tenant-schemas

我相信您使用术语用户是松散的,意思是他们是属于客户的用户。因此,例如,您有一个具有三个客户端的应用程序

  • A(有用户 A1、A2、A3)
  • B(有用户 B1、B2、B3)
  • C(有用户 C1、C2、C3)

因此,当用户 C3 登录时,他/她应该只能查看客户端 C 的数据,而不能查看客户端 A/B 的数据。

如果这确实是您的要求,您可以查看我之前建议的库。

【讨论】:

  • 是的。恰恰。例如,我查看了类似的库github.com/citusdata/django-multitenant。它们的实现方式似乎有所不同。例如,你共享的一个使用一个数据库和一个租户模式。 Django-multitenant 使用一个表和一个模式。我仍在考虑使用哪种架构。
  • 这由您决定。例如,您可能会发现稍后在已经有库的项目中需要使用 celery。根据您的用例和要求做出决定。
猜你喜欢
  • 2011-03-14
  • 2011-06-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 2015-01-05
  • 2012-03-24
  • 1970-01-01
  • 2011-11-03
相关资源
最近更新 更多