2010-09-23 36 views
5

Je développe une application multi-locataire.Meilleure façon de gérer le multitenancy dans Rails 3

L'isolation des données est effectuée par la colonne TenantID dans chaque table.

Quelle est la meilleure façon de gérer automatiquement l'hébergement multiclient pour tous les modèles de locataires.

Exemple:

Contacts.new({.....}) should automatically add :tenant => curret_user.tenant 
Contacts.where({....}) should also add :tenant => curret_user.tenant 

Actuellement, je vois quelque chose comme ça dans bijou Cancan qui qui peut aller chercher des documents pour les paramètres spécifiques de l'utilisateur. Mais il ne fournit rien pour l'opération d'insertion et de mise à jour. Ou peut-être que je ne comprends pas comment le faire.

Cordialement, Alexey Zakharov.

Répondre

1

Il est possible de travailler avec toutes les collections via l'objet locataire.

est ici exemple à l'aide MongoId:

#Find all products with price > 500 in current tenant scope 

current_tenant.products.where(:price.gt => 500) 

#It also work for create and save operations 

current_tenant.products.create :name => "apple", :price => 200 
+0

Avez-vous utilisé la gemme multitenant pour accomplir cela? J'essaie de comprendre comment assigner un nouvel objet locataire lors de l'enregistrement avec l'outil. Pouvez-vous aider? – Nathan

+0

@Nathan avez-vous réussi à résoudre votre problème? Je suis confronté au même problème lors de la connexion, car current_tenant n'est pas défini à ce stade et génère des erreurs non valides. – scanales

+1

@scanales J'ai fini par définir chacune de mes requêtes sur le current_tenant. Il existe des gemmes qui feront des rappels au niveau du modèle, donc cela dépend vraiment de ce que vous essayez d'accomplir. – Nathan

1

Je vous recommande de vérifier la gemme de rubis mutualisée. Il est trivial de s'assurer que toutes les requêtes effectuées respectent le locataire actuel. http://blog.codecrate.com/2011/03/multitenant-locking-down-your-app-and.html

ex:

Multitenant.with_tenant current_tenant do 
    # queries within this block are automatically 
    # scoped to the current tenant 
    User.all 

    # records created within this block are 
    # automatically assigned to the current tenant 
    User.create :name => 'Bob' 
end 
1

I Utilisé Loi Comme locataire bijou pour mutualisée. C'est un très bon bijou et très facile à utiliser. Voici une documentation de cette gemme Act As Tenant