mirror of
https://github.com/Icinga/icingaweb2-module-director.git
synced 2025-07-06 21:44:26 +02:00
ObjectRestriction: work with Zf Select
This commit is contained in:
parent
beae52c2d9
commit
92982c37aa
@ -5,8 +5,10 @@ namespace Icinga\Module\Director\Restriction;
|
|||||||
use Icinga\Authentication\Auth;
|
use Icinga\Authentication\Auth;
|
||||||
use Icinga\Exception\ProgrammingError;
|
use Icinga\Exception\ProgrammingError;
|
||||||
use Icinga\Module\Director\Db;
|
use Icinga\Module\Director\Db;
|
||||||
|
use Icinga\Module\Director\Objects\IcingaObject;
|
||||||
|
use Zend_Db_Select as ZfSelect;
|
||||||
|
|
||||||
class ObjectRestriction
|
abstract class ObjectRestriction
|
||||||
{
|
{
|
||||||
/** @var string */
|
/** @var string */
|
||||||
protected $name;
|
protected $name;
|
||||||
@ -23,6 +25,29 @@ class ObjectRestriction
|
|||||||
$this->auth = $auth;
|
$this->auth = $auth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract public function allows(IcingaObject $object);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply the restriction to the given Hosts Query
|
||||||
|
*
|
||||||
|
* We assume that the query wants to fetch hosts and that therefore the
|
||||||
|
* icinga_host table already exists in the given query, using the $tableAlias
|
||||||
|
* alias.
|
||||||
|
*
|
||||||
|
* @param ZfSelect $query
|
||||||
|
* @param string $tableAlias
|
||||||
|
*/
|
||||||
|
abstract protected function filterQuery(ZfSelect $query, $tableAlias = 'o');
|
||||||
|
|
||||||
|
public function applyToQuery(ZfSelect $query, $tableAlias = 'o')
|
||||||
|
{
|
||||||
|
if ($this->isRestricted()) {
|
||||||
|
$this->filterQuery($query, $tableAlias);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
public function getName()
|
public function getName()
|
||||||
{
|
{
|
||||||
if ($this->name === null) {
|
if ($this->name === null) {
|
||||||
@ -38,6 +63,20 @@ class ObjectRestriction
|
|||||||
return ! empty($restrictions);
|
return ! empty($restrictions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getQueryTableByAlias(ZfSelect $query, $tableAlias)
|
||||||
|
{
|
||||||
|
$from = $query->getPart(ZfSelect::FROM);
|
||||||
|
if (! array_key_exists($tableAlias, $from)) {
|
||||||
|
throw new ProgrammingError(
|
||||||
|
'Cannot restrict query with alias "%s", got %s',
|
||||||
|
$tableAlias,
|
||||||
|
json_encode($from)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $from[$tableAlias]['tableName'];
|
||||||
|
}
|
||||||
|
|
||||||
protected function gracefullySplitOnComma($string)
|
protected function gracefullySplitOnComma($string)
|
||||||
{
|
{
|
||||||
return preg_split('/\s*,\s*/', $string, -1, PREG_SPLIT_NO_EMPTY);
|
return preg_split('/\s*,\s*/', $string, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user