0

I am using django-tenants for a multi-tenant app.

In the docs it talks about setting up SHARED_APPS and TENANT_APPS.

SHARED_APPS is a tuple of strings just like INSTALLED_APPS and should contain all apps that you want to be synced to public

If I want an app (e.g. django.contrib.auth) to be accessible on both the public schema and shared schema, do I include it only in the SHARED_APPS or do I need to include it in both SHARED_APPS and TENANT_APPS?

"SHARED" would imply that everything in this list is accessible via all tenants and the public schema, but the docs seem to imply otherwise?

alias51
  • 8,178
  • 22
  • 94
  • 166

2 Answers2

1

When using django-tenants, your database will contain a public schema (ie. directory), and a schema for each tenant, say tenant1, tenant2, ..

The data of models belonging to a SHARED_APPS will end up in the public folder, and will be accessible by all other tenants (schema's). Hence, it is sufficient to only include int once in the SHARED_APPS

WoodyG
  • 200
  • 1
  • 10
1

I am the maintainer of Django Tenants.
If you want the same user to be able to access in both shared and tenant you would put it in just SHARED_APPS. However this would mean that the same user would be able to get in to multiple tenants I expect you don't want that unless you write a permission table. This would also mean your users are not tenanted.

If you want different users you can put it both the SHARED_APPS and the TENANT_APPS. Django Tenant always queries local schema/tenant first and if that table doesn't exist it goes to the public schema. This is the way I do it with my project. Beware you need to make sure django.contrib.sessions in both SHARED & TENANT apps otherwise you will get a security problem swapping from one tenant to another.

The other think to look at is django-tenant-users

Ankit Tiwari
  • 4,438
  • 4
  • 14
  • 41
Thomas Turner
  • 2,722
  • 1
  • 27
  • 23