Mandantensteuerung

Jede Aktion und jeder Hauptdatensatz1 soll eindeutig einem Mandanten zugeordnet werden. Ist ein Datensatz keinem Datensatz zugeordnet so wird für diesen Datensatz der aktuell gültige Standardmandant angenommen.

Bei Auslieferung ist der Standardmandant der Datensatz mit der Mandanten ID (SHID) 1. Der Standardmandant ist der Konfiguration assembly.property im Schlüssel application.platform.business.context.company.default.id definiert.

Multimandanten

In einer Multimandanten Konfiguration (oder falls man keinen Standardmandant unterstützen möchte) muss der Schlüssel in der Konfiguration auf 0 gesetzt werden. In diesem Fall wird bei Anfragen, bei denen kein Mandant definiert wurde, eine Exception geworfen.

Funktionsweise

Zuweisung von Datensätzen

Jeder Hauptdatensatz soll dass Datenbankfeld sys_asign_company_SHID besitzen und den Datensatz einem Mandanten zuordnen.

Das Feld wird in einer Tabelle folgendermassen definiert.

`sys_asign_company_SHID` int(10) DEFAULT NULL,

Hinweis

Der Wert des Feldes sollte immer den Hauptmandanten2 enthalten. Aus Performancegründen ist dieses Feld auch keine Liste (Mehrfachauswahl).

Hinweis

Das Feld darf nur für die Berechtigungsprüfung herangezogen werden. Für logische Zuweisungen sind eigene Felder vorhanden.

Abfragen der Zuweisung

Hinweis

Der CompanyManager sollte immer über die Anwendung geholt werden, das stellt sicher, das der Manager durch kundenspezifische Anpassungen überschrieben werden kann.

Der aktuell im Request verwendete Mandant kann über folgendes Konstrukt ermittelt werden:

$company=\Alvine\Application\Platform\Bridge\Manager\CompanyManager::getInstance()
        ->getCurrentCompany();

Mit folgendem Where-Statement wird in ein Where-Statement die Mandantenzuordnung geprüft.

\Alvine\Application\Assembly::getInstance()
          ->getCompanyManager()
          ->getCurrentCompany()
          ->injectCompanyAssignmentQuery($where, $table, $company);

Die Methode CompanyManager::getCurrentCompany() schmeißt, falls es keinen Mandanten gibt oder der Benutzer keine Berechtigung hat eine \Alvine\Application\Platform\Bridge\Company\NoCompanyAvailableException. Diese sollte man über einen try/catch abfangen.

try {
    $company=\Alvine\Application\Assembly::getInstance()
                ->getCompanyManager()->getCurrentCompany();
 } catch(\Alvine\Application\Platform\Bridge\Company\NoCompanyAvailableException
                     $ex) {
    // Error
}

Mandant auswählen

Ein Mandant kann entweder über den Get-Parameter companyShid oder über das Headerfeld X-Alvine-Company-Shid gesetzt werden. Bei der Auswahal wird geprüft ob der Benutzer diesen Mandanten verwenden darf.


  1. Ein Hauptdatensatz ist zum Beispiel ein Benutzer (co_user), hingegen ist die Property-Tabele ein zugehöriger Datensatz. 

  2. Mandanten können abgeleitete Mandanten besitzen, so dass sich eine Baumstruktur ergibt. Hauptmandanten sind Einträge ohne Eltern.