/** * 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; }