多租户模式:使用django restframework进行动态api路由

时间:2018-05-02 11:43:13

标签: django django-rest-framework multi-tenant

我是Multi-Tenant架构的新手,使用django-tenant-schema

开发SaaS产品

我的要求就像客户注册产品一样。对于每个注册的客户端,我都是通过遵循单个数据库和隔离模式方法来创建新模式。每当客户端从浏览器请求时,我都能够通过使用子域并授予访问其特定模式的权限来识别它们。当我开始编码时,很多问题都出现在我脑海中。我真的很抱歉在这里问,但stackoverflow只是我最后的希望。数据库如下所示

数据库

  • Public_Schema
    • AUTH_USER
    • Clients_List_Table
  • ClientA_Schema
    • AUTH_USER
    • ClientA_User_List
  • ClientB_Schema
    • AUTH_USER
    • ClientB_User_List

Q1。我们可以对每个客户执行哪种管理操作?

我有休息api例如 http://client.example.com/api/user_list/ 此处客户端可能是ClientA或ClientB

Q2。我们如何实现api路由,当用户在浏览器上请求时动态获取客户端名称,让我们使用相应的模式来显示当前客户端的user_list。

任何回复都可能有所帮助。提前谢谢。

1 个答案:

答案 0 :(得分:3)

我遵循了django-tenants,他们的团队几乎实现了django多租户SassS应用程序所需的一切。因此,除了了解体系结构之外,我还没有做太多工作。我只想回答这个问题。

首先从admin及其特权开始;对于上述要求,我有两个管理员角色: tenants_admin tenant_admin

在这里, tenants_admin (服务产品的人)能够管理 tenants (购买产品的个体公司); tenants_admin 可以操纵租户的数据,它们位于公共架构的表中。

现在进入 tenant_admin ,该用户对租户用户(例如,单个公司的员工)的数据具有特权。

现在从django-tenants克隆项目,为租户创建应用程序。这些租户模式彼此之间非常隔离,包括应用程序名称和租户应用程序的rest_framework。然后照常实施REST API;这些API将使用我们为项目创建的中间件自动导航。