EGOCMS  24.0
EGOTEC Content-Managament-System
Ego_User_Search_Factory.php
gehe zur Dokumentation dieser Datei
1 <?php
2 
4  private static $elastic;
5 
16  public static function start(string $table = 'egotec_user', array $param = [], bool $checkHealthy = false) {
17  if (Ego_System::checkLicence($GLOBALS['egotec_conf']['lib_dir'] . 'elastic')) {
18  require_once('base/Ego_User_Elastic.php');
19  self::$elastic = true;
20 
21  try {
22  $elastic = new Ego_User_Elastic($table, $param, true);
23  return $elastic;
24  } catch (Exception $e) {
25  // Fallback Ego_User_Sql
26  self::$elastic = false;
27 
28  // Wenn geprüft wird, ob der Elasticsearch-Dienst verfügbar ist, muss die Exception weitergereicht werden
29  if ($checkHealthy) {
30  throw $e;
31  }
32  }
33  }
34 
35  require_once('base/Ego_User_Sql.php');
36  self::$elastic = false;
37  return new Ego_User_Sql();
38  }
39 
45  public static function isElastic(): bool {
46  return self::$elastic;
47  }
48 
56  public static function filterSearch(array $search): array {
57  // Werte aus der Suchmaske anpassen
58  if ($search['no_admin'] !== '' || $search['liveserver'] !== '' || $search['no_singlesignon'] !== '') {
59  switch ((int) $search['no_admin']) {
60  case 0:
61  unset($search['no_admin']);
62  break;
63  case 1:
64  $search['no_admin'] = 1;
65  break;
66  case 2:
67  $search['no_admin'] = 0;
68  }
69  }
70 
71  // Folgende Parameter müssen vor der Suche angepasst werden
72  $params_to_change = [
73  'multiple_login',
74  'user_inactive',
75  'liveserver',
76  'no_singlesignon'
77  ];
78 
79  // Suchparameter anpassen
80  foreach ($search as $search_param => $search_value) {
81  if (in_array($search_param, $params_to_change)) {
82  switch ($search_value) {
83  case 0:
84  unset($search[$search_param]);
85  break;
86  case 1:
87  $search[$search_param] = 0;
88  break;
89  case 2:
90  $search[$search_param] = 1;
91  }
92  }
93  }
94 
95  return $search;
96  }
97 
106  public static function checkSearchFilter(string $type, array $search): bool {
107  if (
108  ($search['no_admin'] === 1 && $type === 'admin') // Wenn der Suchfilter nach Intranet-Usern sucht und die Admin-Benutzer geöffent werden
109  || ($search['no_admin'] === 0 && $type === 'intranet') // Wenn der Suchfilter nach Admin-Usern sucht und die Intranet-Benutzer geöffnet werden
110  || ($search['user_inactive'] === 0 && $type === 'inactive') // Wenn nach aktiven Benutzern gesucht wird und inaktive geöffnet werden
111  || ($search['user_inactive'] === 1 && $type !== 'inactive') // Inaktive Benutzer nur bei type=inactive
112  || (!empty($search['group_role']) && $type === 'norelation') // Wenn nach einem Benutzer mit bestimmter Gruppe oder Rolle gesucht wird und die nicht zugeordneten Benutzer geöffnet werden
113  || (!$search['search_deleted'] && $type === 'trash') // Papierkorb wird aufgeklappt und der Suchfilter sucht nicht nach gelöschten Benutzern
114  ) {
115  return false;
116  } else {
117  return true;
118  }
119  }
120 
129  public static function isAcceptedUser(User_SQL $user, array $group_role_rel = null): bool {
130  // Gruppen/Rollen des angegebenen Benutzers
131  $group_role_rel = $group_role_rel ?? $user->getGroupRoleRelations();
132 
133  if (
134  empty($group_role_rel) // Nicht zugeordnete Benutzer können immer eingesehen werden
135  || $GLOBALS['auth']->hasSuperuserPermission() // Superuser dürfen alle anderen Benutzer sehen
136  ) {
137  return true;
138  } else {
139  // Alle Gruppen durchgehen
140  foreach ($group_role_rel as $group_id => $roles) {
141  // Alle Rollen in der Gruppe durchgehen
142  foreach (explode(',', $roles) as $role_id) {
143  if (
144  $GLOBALS['auth']->hasPermission($group_id, $role_id) // Aktueller Benutzer hat Rechte auf die Gruppen/Rollen Kombination
145  ) {
146  // Benutzer kann eingesehen werden, sobald der aktuelle Benutzer Rechte auf eine der Gruppen/Rollen Kombinationen hat
147  return true;
148  }
149  }
150  }
151 
152  // Aktueller Benutzer darf den angegebenen Benutzer nicht sehen
153  return false;
154  }
155  }
156 
166  public static function checkRightsFilter(string $rightsFilter, User_SQL $user, array $group_role_rel = null): bool {
167  // Ausgewählte Gruppe
168  $group_to_check = explode(',', $rightsFilter)[0];
169  // Ausgewählte Rolle
170  $role_to_check = explode(',', $rightsFilter)[1];
171 
172  $has_group = false;
173  $has_role = false;
174 
175  // Gruppen/Rollen des gefundenen Benutzers
176  $groups = [];
177  $roles = [];
178  $group_role_rel = $group_role_rel ?? $user->getGroupRoleRelations();
179 
180  // Alle Gruppen/Rollen durchgehen
181  foreach ($group_role_rel as $user_group=>$user_roles) {
182  $groups[] = $user_group;
183  foreach (explode(',', $user_roles) as $role) {
184  $roles[] = $role;
185  }
186  }
187 
188  $roles = array_unique($roles);
189 
190  // Prüfen, ob der Benutzer die Gruppe, nach der gesucht wurde, hat, oder keine Gruppe angegeben wurde
191  if (!$group_to_check || in_array($group_to_check, $groups)) {
192  $has_group = true;
193  }
194 
195  // Prüfen, ob der Benutzer die Rolle, nach der gesucht wurde, hat, oder keine Rolle angegeben wurde
196  if (!$role_to_check || in_array($role_to_check, $roles)) {
197  $has_role = true;
198  }
199 
200  return ($has_group && $has_role);
201  }
202 
208  public static function updateIndex(): void {
209  $search = self::start();
210 
211  if (self::isElastic()) {
212  // Alle Benutzer holen
213  $db = new_db_connection([
214  'table' => 'egotec_user'
215  ]);
216 
217  // Index neu anlegen
218  $search->indexDelete(false);
219 
220  // Alle Benutzer updaten
221  while ($record = $db->nextRecord()) {
222  $user = new User_SQL($record['user_id']);
223 
224  $user->update([], true);
225  }
226  }
227  }
228 }
static checkLicence($ini_path)
static isAcceptedUser(User_SQL $user, array $group_role_rel=null)
static filterSearch(array $search)
static start(string $table='egotec_user', array $param=[], bool $checkHealthy=false)
static checkSearchFilter(string $type, array $search)
static checkRightsFilter(string $rightsFilter, User_SQL $user, array $group_role_rel=null)