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.