Frage

Ich versuche, eine Multi-Tenant-Anwendung zu implementieren, dh - Daten aller Kunden in einer einzigen Datenbank - jede gemeinsame Tabelle hat ein tenant_id Feld separate Daten

Ich wünsche Datentrennung zu erreichen, indem das Hinzufügen where('tenant_id = ', $user->getTenantID()) {pseudoc-Code} für alle SELECT-Abfragen Ich konnte keine Lösung up-front finden, aber hier sind mögliche Ansätze Ich erwäge. 1) roher Ansatz: Alle fetchAll und fetchOne Funktionen in jeder Klasse Customizing (I verrückt werden!) 2) mit Hörer: möglicherweise Codierung für das preDqlSelect Ereignis und das Hinzufügen der ‚wo‘ auf alle Fragen 3) Überschreibung buildQuery (): konnte nicht ein Beispiel dafür für Front-End finden 4) implementieren contentformfilter: wieder brauchen einen Zeiger

würde schätzen, wenn jemand diese und Kommentar auf efficieny, Eignung bestätigen konnte. Auch, wenn jemand erreicht Multitenancy mit einer anderen Strategie, pl Aktie. Dank

War es hilfreich?

Lösung 3

Ich habe die sfMultiTenantPlugin veröffentlicht, es finden Sie hier: http://www.symfony-project.org/plugins/sfMultiTenantPlugin

Andere Tipps

Ich arbeite eine Lösung aus mit Lehre Nehmen Hörer durch das Ereignis preDqlSelect Codierung. Ich denke, dies ist der beste und einfachste Weg, um Dinge in allgemeiner Weise zu tun, anstatt jede Tabellenklasse und Schreiben Mieter bewusst Abfragen zu ändern. Mit Hörer, wird Multi-Tenancy für Entwickler vollständig transparent sein.

Vielen Dank für die Teilnahme.

Ich glaube, dass die mehr machbar und sicher eine neue Funktion zu erstellen, ist ein Mieter bewusst Abfrage abgerufen werden, ist dies ein Beispiel ... Ersetzen MyModel mit dem Namen Ihrer Tabelle:

// lib/model/doctrine/MyModelTable.class.php
class MyModelTable extends Doctrine_Table
{
  public function createTenantAwareQuery($userId)
  {
    $q = $this->createQuery('m')
      ->where('tenant_id = ', $userId);
    return $q;
  }
}

Dann ist diese neue Funktion verbrauchen nur rufen:

$myVar = Doctrine_Core::getTable('MyModel')->createTenantAwareQuery()
  ->where('something = ', $value);

Auf diese Weise können Sie eine „Tenant Aware Abfrage“ erstellen, wenn nötig ... Sie nur diese Funktion nutzen, wenn nötig ... Auch im Admin-Generator gibt es eine Art und Weise in der Konfigurationsdatei die Standardabfragemethode außer Kraft zu setzen:

# apps/backend/modules/(module)/config/generator.yml
config:
  list:
    table_method: retrieveTenantAwareResult

Das einzige, was links ist, diese Methode zu erstellen.

Hope diese Antwort für Sie funktioniert =)

Das sfMultiTenantPlugin Plugin funktioniert nicht für leftJoin. Wenn A beitreten B links und B leer ist, wird das Plugin eine leere Ergebnismenge zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top