Multi-institution support and site configuration in OpenEyes
OpenEyes is designed to support multiple institutions and sites within a single deployment, enabling shared infrastructure while maintaining data segregation and institution-specific configurations.
// Get all tenanted institutions$institutions = Institution::model()->getTenanted();// Get tenanted institutions user is member of$userInstitutions = Institution::model()->getTenanted( '', [], $user_must_be_member = true);// Get as array for dropdown$institutionList = Institution::model()->getTenantedList( $current_institution_only = false, $user_must_be_member = true);
Each institution can have multiple authentication methods configured:
class InstitutionAuthentication extends BaseActiveRecord{ public $institution_id; // Link to institution public $user_authentication_method; // 'BASIC', 'LDAP', 'SAML', 'OIDC' public $description; // Display name public $active; // Whether method is active public $site_id; // Optional site restriction}
class Site extends BaseActiveRecord{ public $id; public $name; // Site name public $short_name; // Abbreviated name public $institution_id; // Parent institution public $contact_id; // Site contact details public $telephone; // Main phone public $fax; // Fax number public $active; // Whether site is active}
// Get current institution$institution = Institution::model()->getCurrent();// or from session$institutionId = Yii::app()->session['selected_institution_id'];// Get current site $site = Site::model()->getCurrent();// or from session$siteId = Yii::app()->session['selected_site_id'];// Get current firm/context$firm = Firm::model()->findByPk( Yii::app()->session['selected_firm_id']);
The current institution context is stored in the session and used throughout the application to filter data and apply institution-specific settings.
// Get all users for an institution$institution_user_ids = Yii::app()->db->createCommand() ->selectDistinct('ua.user_id') ->from('institution_authentication ia') ->join('user_authentication ua', 'ua.institution_authentication_id = ia.id') ->where('ia.institution_id = :institution_id') ->bindValue(':institution_id', $institutionId) ->queryColumn();// Get users from current institution only$users = User::model()->getUsersFromCurrentInstitution();
Patients can have different identification numbers at different institutions:
class PatientIdentifier extends BaseActiveRecord{ public $patient_id; public $num_type_id; // NHS Number, Hospital Number, etc. public $value; // The actual number public $institution_id; // Institution where number applies}// Get patient hospital number for current institution$hos_num = $patient->getHos( Yii::app()->session['selected_institution_id']);// Get NHS number$nhs_num = $patient->getNhs( Yii::app()->session['selected_institution_id']);