2010-09-23 8 views
5

Ich bin Multi-Tenant-Anwendung.Der beste Weg, um Multi-Tenancy in Rails 3

Alle Datenisolierung erfolgt durch TenantID Spalte in jeder Tabelle.

Was ist die beste Möglichkeit, die Mandantenfähigkeit für alle Mandantenmodelle automatisch zu handhaben?

Beispiel:

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

Derzeit sehe ich so etwas wie dies in CanCan Juwel, das die Datensätze für bestimmte Benutzerparameter abrufen kann. Aber es bietet nichts für den Einfüge- und Aktualisierungsvorgang. Oder vielleicht verstehe ich nicht, wie es geht.

Grüße, Alexey Zakharov.

Antwort

1

Es ist möglich, wenn Sie mit allen Sammlungen über Tenant-Objekt arbeiten.

Hier Probe Mongoid mit:

#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

Haben Sie den Multitenant-Edelstein verwendet, um dies zu erreichen? Ich versuche herauszufinden, wie man während der Registrierung mit devise ein neues Tenant-Objekt zuweist. Kannst du helfen? – Nathan

+0

@Nathan hast du dein Problem gelöst? Ich habe das gleiche Problem bei der Anmeldung, da der current_tenant zu diesem Zeitpunkt nicht gesetzt ist und ungültige Anmeldeinformationen gibt. Fehler – scanales

+1

@scanales Ich habe jede meiner Abfragen auf current_tenant festgelegt. Es gibt Edelsteine ​​da draußen, die Callbacks auf Model-Ebene machen, also hängt es wirklich davon ab, was du erreichen willst. – Nathan

1

Ich würde empfehlen, den Multi-Tenant-Ruby Gem Check-out. Es ist trivial, sicherzustellen, dass alle ausgeführten Abfragen den aktuellen Mandanten berücksichtigen. 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 Gebraucht Gesetz als Mieter gem für Multitenancy. Es ist ein ziemlich gutes Juwel und sehr einfach zu bedienen. Hier ist eine Dokumentation dieses Edelsteins Act As Tenant