2010-11-05 9 views
2

J'ai vu diverses questions sur Django multisite et multi-hôte, y compris des sous-domaines et des schémas spécifiques par sous-domaine. Ce que je n'ai pas vu est une solution (ou des conseils pour que je puisse en coder un) à ce problème.Plusieurs schémas et utilisateurs PostgreSQL sur Django avec des sous-domaines

  1. J'utilise Django + PostgreSQL sur un site, disons que myapp.com
  2. Le site principal myapp.com est utilisé pour l'enregistrement des sociétés
  3. Une société enregistrée obtient son propre sous-domaine, company.myapp .com, et se connecte et fonctionne à partir de là.

Mon idée de faire ceci est de faire 2 schémas initiaux dans PostgreSQL.

  1. schéma « auth » pour les entreprises et les utilisateurs
  2. schéma « empty_company_template » avec les tables de base pour une entreprise, tous vides, mais accroché aux séquences droite etc.

Quand une nouvelle société registres, je veux que cela se produise:

  1. Créer un nouveau schéma pour l'entreprise, dérive de empty_company_template
  2. Cr eate un nouvel utilisateur DB pour la société, nommée société (le nom de l'entreprise)
  3. Définir le chemin de recherche de ce nouvel utilisateur à l'entreprise, auth (pas d'accès à empty_company_template, pas d'accès à d'autres utilisateurs schéma de)

Pour moi, cela semble mieux que les solutions existantes qui semblent toutes dépendre d'un seul utilisateur de base de données pour l'ensemble de l'application (avec accès à tous les régimes). Cependant, je lutte pour que cela fonctionne. Est-ce vraiment une approche viable? Est-ce que quelqu'un peut-il me montrer la bonne direction? C'est Django, alors peut-être que c'est fait et que je ne l'ai pas trouvé?

Répondre

3

J'ai une solution de travail qui fait tout sauf des utilisateurs distincts.

C'est un petit morceau de middleware (juste process_request) qui détermine le sous-domaine, et exécute une requête SET search_path sur la base de données. C'est assez bon pour moi pour l'instant.

Toute personne intéressée par le code, contactez-moi. Je vais le publier quelque part quand c'est final.

EDIT 22 décembre 2010:

je publiais le code sur mon blog à http://blog.dyve.net/django-subdomains-and-postgresql-schemas

+0

Je serais intéressé de savoir si cette solution fonctionne toujours pour vous. Si vous avez décidé de passer à autre chose, veuillez le mettre à jour. –

0

Si vous voulez avoir des utilisateurs DB distincts, vous aurez probablement besoin d'instances Django séparées, sinon il n'y aura pas de gain de sécurité. Ce modèle nécessitera une gestion des processus beaucoup plus complexe. Je ne pense pas que vous trouverez une solution prête à l'emploi pour une telle application, donc vous devrez probablement rouler la vôtre. Sinon, si vous ne souhaitez pas investir beaucoup de temps, restez avec l'utilisateur unique pour toute l'approche de l'application.

+0

Je travaille quelque chose moi-même où je l'espère pour vous donner tort :-) – dyve

+0

J'aime à prouver faux :) (bien que n'étant pas faux en soi) –