/**
  * Erstellt einen Query-Builder für dieses Entity und gibt diesen zurück.
  * Es werden keine Felder hinzugefügt!
  *
  * @param bool $addFelder
  * @return QueryBuilder
  */
 public static function createSelectBuilder($addFelder = false)
 {
     // Via late static binding eine Instanz der Klasse erzeugen
     $classname = get_called_class();
     $temp = new $classname();
     $entity = Database::getEntityName($temp->definition->name);
     $builder = Database::select()->table($entity);
     // Felder
     if ($addFelder) {
         $builder->field($entity . '.*');
         foreach ($temp->lookupFelder as $feld) {
             /** @var ModelFieldLookup $feld */
             $relationTable = Database::getEntityName($feld->getRelationName());
             // TODO: Wenn Type-Safe dann Absturz
             if ($feld->field != '') {
                 $builder->field("{$relationTable}.{$feld->field} {$feld->name}");
             }
         }
         foreach ($temp->felder as $feld) {
             if ($feld instanceof ModelFieldCalc) {
                 $builder->field("({$feld->getFormula()}) as {$feld->name}");
             }
         }
     }
     // Joins
     foreach ($temp->relationen as $relation) {
         /** @var $relation Relation */
         $foreigntable = Database::getEntityName($relation->foreignEntity);
         if ($relation->alias === '') {
             $alias = $entity;
         } else {
             $alias = $relation->alias;
         }
         $additionalCriteria = '';
         if ($relation->joinCriteria !== '') {
             $additionalCriteria = ' and ' . $relation->joinCriteria;
         }
         $builder->join($relation->join, "{$foreigntable} {$relation->name}", "{$alias}.{$relation->field} = {$relation->name}.{$relation->foreignField} {$additionalCriteria}");
     }
     return $builder;
 }
 public function hatBerechtigung($recht, $user = null, $rolle = null)
 {
     if ($user != null && $rolle == null) {
         // Falls die Berechtigung für einen bestimmten User überprüft werden soll
         // TODO:
         $result = true;
     } elseif ($user == null && $rolle != null) {
         // Falls die Berechtigung für eine bestimmte Rolle überprüft werden soll
         $berechtigung = Database::select()->field('re_recht')->from('rechte')->where('re_element = :element', ['element' => $recht])->where('re_rolle = :rolle', ['rolle' => $rolle])->orderBy('re_id')->limit(1)->scalar();
         $result = $berechtigung == 1;
     } else {
         // Aktuellen User prüfen
         $berechtigung = Database::select()->field('max(re_recht)')->from('rechte')->where('re_element = :element', ['element' => $recht])->where('re_rolle in ' . $_SESSION['rollen'])->scalar();
         $result = $berechtigung > 0;
     }
     if (!$result) {
         // Das if dient dazu, keine Warnungen zu generieren wenn
         // SecurityCheckboxGroups angezeigt werden
         if ($user != null) {
             Logging::warning("Berechtigung nicht vorhanden!");
         }
     }
     return $result;
 }