DbUserGroupBackend: Adjust to fit the new database schema

refs #8826
This commit is contained in:
Johannes Meyer 2015-05-28 15:22:15 +02:00
parent 1c6ded9324
commit 32b99be8ab

View File

@ -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()
);
}
} }