2011-02-10 6 views
10

Buon pomeriggio - Oggi ho una domanda piuttosto generica - Ho ricevuto il compito di creare un'applicazione web per gestire alcune informazioni di base sui clienti. È un'applicazione molto semplice, ma quello che non so è cosa tenere a mente per sviluppare il sito che supporta più utenti nei propri domini o sottodomini del nostro URL?Cosa tenere a mente quando si sviluppa un'applicazione MVN asp.net multi-tenant?

Come limitarei gli utenti ad accedere a ogni altra parte dell'app?

Ho visto menzionare lo scoping del database in domande simili su Stack Overflow, qualcuno potrebbe elaborare le migliori pratiche per un'implementazione come questa?

Esistono nuove funzionalità in MVC3 per supportare la multi-tenancy? Sto affrontando questo problema con MVC2 e il mio sito di eCommerce in cui abbiamo deciso di volerlo etichettato in bianco e personalizzabile per più proprietari di negozi e non sappiamo da dove iniziare nell'implementazione di queste funzionalità in un'applicazione esistente. Qualsiasi input è apprezzato.

modificare

di elaborare su multi-tenancy, quello che voglio dire - nel contesto di un negozio, ad esempio, più utenti si iscrivono per il proprio negozio a www.mystore.com e sono ogni dato un sottodominio unico per accedere alla propria istanza dello store, a user1.mystore.com, user2.mystore.com, ecc. Ogni negozio avrebbe clienti con cronologia degli ordini e tali clienti avrebbero accesso. Avrei bisogno di limitare i clienti di user1.mystore.com dall'accedere a user2.mystore.com senza un nuovo account, e allo stesso modo impedire a user2.mystore.com di accedere alla cronologia dei clienti di user1.mystore.com.

risposta

20
+0

Ottimi collegamenti, grazie! Ho intenzione di parlargli di installare istanze separate dello store per ogni cliente ed evitare il mal di testa di svuotare l'applicazione. – Gallen

+0

Per MVC 4 c'è un'altra possibilità ora: le viste possono essere reindirizzate utilizzando la modalità Display personalizzata. Per esempio. per Index.TenantName.cshtml e Index.TenantName.Iphone.cshtml – bushed

7

Molto probabilmente stai per trascorrere un bel po 'di tempo a ristrutturare il tuo database.

Il primo passo è che si creerà un tavolo per ospitare la propria lista "Inquilino". Quindi è necessario aggiungere questo TenantId a quasi tutti i tavoli del sistema per assicurarsi che nessuno passi l'uno sull'altro. Puoi saltare qualsiasi tabella di natura globale. Un esempio potrebbe essere un elenco di codici di stato.

Tuttavia, tutto dagli utenti ai dati che hanno ecc. Dovrà avere questo ID. Inoltre, modifica tutti i tuoi indici per tenere conto di tenantid.

Una volta ottenuto ciò, sarà necessario modificare tutte le query per prendere in considerazione il tenantid.

Una colonna della tabella dei tenant deve essere l'url del portale. Come customername.oursite.com o qualsiasi altra cosa. In questo modo puoi indicare più URL allo stesso identico codice. Quando il sito deve utilizzare il tenantid corrente, basta cercarlo in base all'URL passato.

Se lo facessi, avrei intenzione di spendere circa 1 o 2 ore per tabella nel database per renderlo "multi-tenant". Ovviamente alcune tabelle (e le loro query) andranno più velocemente; altri impiegheranno più tempo.

Per inciso, questo non copre cose come la personalizzazione dell'interfaccia utente (look/feel) per inquilino o qualcosa di quella natura. Se è necessario, è necessario creare una directory sul server affinché ciascun tenant possa conservare i propri fogli di stile o caricarlo direttamente dal DB (che ha i suoi problemi relativi alla memorizzazione nella cache).

In genere, si progetta per questo all'inizio del progetto. Refitting un progetto già (o quasi) completo è un PITA.

Infine, testare, testare, testare e fare ulteriori test.Dovrai assicurarti che ogni singola query recuperi solo i dati di cui ha assolutamente bisogno.

+1

Questo articolo tratta diversi progetti di database: http://msdn.microsoft.com/en-us/library/aa479086.aspx – rboarman

+0

@rboarman: buon collegamento. Me ne sono dimenticato. – NotMe

Problemi correlati