mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-21 04:44:25 +02:00
parent
1c6ded9324
commit
32b99be8ab
@ -5,6 +5,7 @@ namespace Icinga\Authentication\UserGroup;
|
|||||||
|
|
||||||
use Icinga\Data\Filter\Filter;
|
use Icinga\Data\Filter\Filter;
|
||||||
use Icinga\Repository\DbRepository;
|
use Icinga\Repository\DbRepository;
|
||||||
|
use Icinga\Repository\RepositoryQuery;
|
||||||
use Icinga\User;
|
use Icinga\User;
|
||||||
|
|
||||||
class DbUserGroupBackend extends DbRepository implements UserGroupBackendInterface
|
class DbUserGroupBackend extends DbRepository implements UserGroupBackendInterface
|
||||||
@ -16,23 +17,33 @@ class DbUserGroupBackend extends DbRepository implements UserGroupBackendInterfa
|
|||||||
*/
|
*/
|
||||||
protected $queryColumns = array(
|
protected $queryColumns = array(
|
||||||
'group' => array(
|
'group' => array(
|
||||||
'group' => 'name COLLATE utf8_general_ci',
|
'group_id' => 'g.id',
|
||||||
'group_name' => 'name',
|
'group' => 'g.name COLLATE utf8_general_ci',
|
||||||
'parent' => 'parent COLLATE utf8_general_ci',
|
'group_name' => 'g.name',
|
||||||
'parent_name' => 'parent',
|
'parent' => 'g.parent COLLATE utf8_general_ci',
|
||||||
'created_at' => 'UNIX_TIMESTAMP(ctime)',
|
'parent_name' => 'g.parent',
|
||||||
'last_modified' => 'UNIX_TIMESTAMP(mtime)'
|
'created_at' => 'UNIX_TIMESTAMP(g.ctime)',
|
||||||
|
'last_modified' => 'UNIX_TIMESTAMP(g.mtime)'
|
||||||
),
|
),
|
||||||
'group_membership' => array(
|
'group_membership' => array(
|
||||||
'group' => 'group_name COLLATE utf8_general_ci',
|
'group_id' => 'gm.group_id',
|
||||||
'group_name',
|
'user' => 'gm.username COLLATE utf8_general_ci',
|
||||||
'user' => 'username COLLATE utf8_general_ci',
|
'user_name' => 'gm.username',
|
||||||
'user_name' => 'username',
|
'created_at' => 'UNIX_TIMESTAMP(gm.ctime)',
|
||||||
'created_at' => 'UNIX_TIMESTAMP(ctime)',
|
'last_modified' => 'UNIX_TIMESTAMP(gm.mtime)'
|
||||||
'last_modified' => 'UNIX_TIMESTAMP(mtime)'
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The table aliases being applied
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $tableAliases = array(
|
||||||
|
'group' => 'g',
|
||||||
|
'group_membership' => 'gm'
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The statement columns being provided
|
* The statement columns being provided
|
||||||
*
|
*
|
||||||
@ -40,10 +51,15 @@ class DbUserGroupBackend extends DbRepository implements UserGroupBackendInterfa
|
|||||||
*/
|
*/
|
||||||
protected $statementColumns = array(
|
protected $statementColumns = array(
|
||||||
'group' => array(
|
'group' => array(
|
||||||
|
'group_id' => 'id',
|
||||||
|
'group_name' => 'name',
|
||||||
|
'parent_name' => 'parent',
|
||||||
'created_at' => 'ctime',
|
'created_at' => 'ctime',
|
||||||
'last_modified' => 'mtime'
|
'last_modified' => 'mtime'
|
||||||
),
|
),
|
||||||
'group_membership' => array(
|
'group_membership' => array(
|
||||||
|
'group_id' => 'group_id',
|
||||||
|
'user_name' => 'username',
|
||||||
'created_at' => 'ctime',
|
'created_at' => 'ctime',
|
||||||
'last_modified' => 'mtime'
|
'last_modified' => 'mtime'
|
||||||
)
|
)
|
||||||
@ -100,23 +116,19 @@ class DbUserGroupBackend extends DbRepository implements UserGroupBackendInterfa
|
|||||||
*/
|
*/
|
||||||
public function getMemberships(User $user)
|
public function getMemberships(User $user)
|
||||||
{
|
{
|
||||||
$groupStmt = $this->ds->select()
|
|
||||||
->from($this->prependTablePrefix('group'), array('name', 'parent'))
|
|
||||||
->getSelectQuery()
|
|
||||||
->query();
|
|
||||||
$groups = array();
|
$groups = array();
|
||||||
foreach ($groupStmt as $group) {
|
foreach ($this->ds->select()->from($this->prependTablePrefix('group'), array('name', 'parent')) as $group) {
|
||||||
|
// Using the raw query here due to the non-existent necessity to join, convert, or...
|
||||||
$groups[$group->name] = $group->parent;
|
$groups[$group->name] = $group->parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
$membershipStmt = $this->ds->select() // TODO: Join this table
|
$membershipQuery = $this
|
||||||
->from($this->prependTablePrefix('group_membership'), array('group_name'))
|
->select()
|
||||||
->where('username', $user->getUsername())
|
->from('group_membership', array('group_name'))
|
||||||
->getSelectQuery()
|
->where('user_name', $user->getUsername());
|
||||||
->query();
|
|
||||||
$memberships = array();
|
|
||||||
|
|
||||||
foreach ($membershipStmt as $membership) {
|
$memberships = array();
|
||||||
|
foreach ($membershipQuery as $membership) {
|
||||||
$memberships[] = $membership->group_name;
|
$memberships[] = $membership->group_name;
|
||||||
$parent = $groups[$membership->group_name];
|
$parent = $groups[$membership->group_name];
|
||||||
while ($parent !== null) {
|
while ($parent !== null) {
|
||||||
@ -128,4 +140,32 @@ class DbUserGroupBackend extends DbRepository implements UserGroupBackendInterfa
|
|||||||
|
|
||||||
return $memberships;
|
return $memberships;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Join group into group_membership
|
||||||
|
*
|
||||||
|
* @param RepositoryQuery $query
|
||||||
|
*/
|
||||||
|
protected function joinGroup(RepositoryQuery $query)
|
||||||
|
{
|
||||||
|
$query->getQuery()->join(
|
||||||
|
$this->requireTable('group'),
|
||||||
|
'gm.group_id = g.id',
|
||||||
|
array()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Join group_membership into group
|
||||||
|
*
|
||||||
|
* @param RepositoryQuery $query
|
||||||
|
*/
|
||||||
|
protected function joinGroupMembership(RepositoryQuery $query)
|
||||||
|
{
|
||||||
|
$query->getQuery()->join(
|
||||||
|
$this->requireTable('group_membership'),
|
||||||
|
'g.id = gm.group_id',
|
||||||
|
array()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user