2010-09-23 14 views
5

Sto costruendo un'applicazione multi-tenant.Il modo migliore per gestire la multi-tenancy in Rails 3

L'isolamento di tutti i dati viene eseguito dalla colonna TenantID in ciascuna tabella.

Qual è il modo migliore per gestire automaticamente la multi-tenancy per tutti i modelli di titolari.

Esempio:

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

Attualmente vedo qualcosa di simile in CanCan gemma che che può recuperare i record per i parametri utente specifici. Ma non fornisce nulla per l'operazione di inserimento e aggiornamento. O forse non capisco come farlo.

Saluti, Alexey Zakharov.

risposta

1

È possibile se si lavorerà con tutte le raccolte tramite l'oggetto titolare.

Ecco campione utilizzando 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

Hai usato la gemma multitenant per realizzare questo? Sto cercando di capire come assegnare un nuovo oggetto titolare durante la registrazione con Idea. Puoi aiutare? – Nathan

+0

@Nathan sei riuscito a risolvere il tuo problema? Sto affrontando lo stesso problema al momento dell'accesso, perché il current_tenant non è impostato a questo punto e restituisce l'errore di credenziali non valido – scanales

+1

@scanales Ho finito con lo scoping di ciascuna delle mie query sul current_tenant. Ci sono gemme là fuori che faranno call back a livello di modello, quindi dipende davvero da cosa stai cercando di realizzare. – Nathan

1

mi consiglia di verificare la gemma rubino multi-tenant. Rende banale garantire che tutte le query eseguite rispettino l'attuale tenant. http://blog.codecrate.com/2011/03/multitenant-locking-down-your-app-and.html

es:

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

ho usato Act As inquilino gioiello per multi-tenancy. È una gemma piuttosto buona e molto facile da usare. Ecco una documentazione di questa gemma Act As Tenant

Problemi correlati