Merge pull request #20814 from nextcloud/group-id-only
dont get the group details if we only ask for the id
This commit is contained in:
commit
cac844d915
|
@ -77,7 +77,7 @@ class Manager extends PublicEmitter implements IGroupManager {
|
||||||
/** @var \OC\Group\Group[] */
|
/** @var \OC\Group\Group[] */
|
||||||
private $cachedGroups = [];
|
private $cachedGroups = [];
|
||||||
|
|
||||||
/** @var \OC\Group\Group[] */
|
/** @var (string[])[] */
|
||||||
private $cachedUserGroups = [];
|
private $cachedUserGroups = [];
|
||||||
|
|
||||||
/** @var \OC\SubAdmin */
|
/** @var \OC\SubAdmin */
|
||||||
|
@ -276,14 +276,9 @@ class Manager extends PublicEmitter implements IGroupManager {
|
||||||
* @return \OC\Group\Group[]
|
* @return \OC\Group\Group[]
|
||||||
*/
|
*/
|
||||||
public function getUserIdGroups($uid) {
|
public function getUserIdGroups($uid) {
|
||||||
if (isset($this->cachedUserGroups[$uid])) {
|
|
||||||
return $this->cachedUserGroups[$uid];
|
|
||||||
}
|
|
||||||
$groups = [];
|
$groups = [];
|
||||||
foreach ($this->backends as $backend) {
|
|
||||||
$groupIds = $backend->getUserGroups($uid);
|
foreach ($this->getUserIdGroupIds($uid) as $groupId) {
|
||||||
if (is_array($groupIds)) {
|
|
||||||
foreach ($groupIds as $groupId) {
|
|
||||||
$aGroup = $this->get($groupId);
|
$aGroup = $this->get($groupId);
|
||||||
if ($aGroup instanceof IGroup) {
|
if ($aGroup instanceof IGroup) {
|
||||||
$groups[$groupId] = $aGroup;
|
$groups[$groupId] = $aGroup;
|
||||||
|
@ -291,10 +286,8 @@ class Manager extends PublicEmitter implements IGroupManager {
|
||||||
$this->logger->debug('User "' . $uid . '" belongs to deleted group: "' . $groupId . '"', ['app' => 'core']);
|
$this->logger->debug('User "' . $uid . '" belongs to deleted group: "' . $groupId . '"', ['app' => 'core']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
return $groups;
|
||||||
$this->cachedUserGroups[$uid] = $groups;
|
|
||||||
return $this->cachedUserGroups[$uid];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -320,7 +313,7 @@ class Manager extends PublicEmitter implements IGroupManager {
|
||||||
* @return bool if in group
|
* @return bool if in group
|
||||||
*/
|
*/
|
||||||
public function isInGroup($userId, $group) {
|
public function isInGroup($userId, $group) {
|
||||||
return array_key_exists($group, $this->getUserIdGroups($userId));
|
return array_search($group, $this->getUserIdGroupIds($userId)) !== false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -330,9 +323,25 @@ class Manager extends PublicEmitter implements IGroupManager {
|
||||||
* @return array with group ids
|
* @return array with group ids
|
||||||
*/
|
*/
|
||||||
public function getUserGroupIds(IUser $user) {
|
public function getUserGroupIds(IUser $user) {
|
||||||
return array_map(function ($value) {
|
return $this->getUserIdGroupIds($user->getUID());
|
||||||
return (string)$value;
|
}
|
||||||
}, array_keys($this->getUserGroups($user)));
|
|
||||||
|
/**
|
||||||
|
* @param string $uid the user id
|
||||||
|
* @return GroupInterface[]
|
||||||
|
*/
|
||||||
|
private function getUserIdGroupIds($uid) {
|
||||||
|
if (!isset($this->cachedUserGroups[$uid])) {
|
||||||
|
$groups = [];
|
||||||
|
foreach ($this->backends as $backend) {
|
||||||
|
if ($groupIds = $backend->getUserGroups($uid)) {
|
||||||
|
$groups = array_merge($groups, $groupIds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->cachedUserGroups[$uid] = $groups;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->cachedUserGroups[$uid];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -390,17 +390,15 @@ class ManagerTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetUserGroupIds() {
|
public function testGetUserGroupIds() {
|
||||||
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Group\Manager $manager */
|
/**
|
||||||
$manager = $this->getMockBuilder(\OC\Group\Manager::class)
|
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
|
||||||
->disableOriginalConstructor()
|
*/
|
||||||
->setMethods(['getUserGroups'])
|
$backend = $this->getTestBackend();
|
||||||
->getMock();
|
$backend->method('getUserGroups')
|
||||||
$manager->expects($this->once())
|
->willReturn(['123', 'abc']);
|
||||||
->method('getUserGroups')
|
|
||||||
->willReturn([
|
$manager = new \OC\Group\Manager($this->userManager, $this->dispatcher, $this->logger);
|
||||||
'123' => '123',
|
$manager->addBackend($backend);
|
||||||
'abc' => 'abc',
|
|
||||||
]);
|
|
||||||
|
|
||||||
/** @var \OC\User\User|\PHPUnit_Framework_MockObject_MockObject $user */
|
/** @var \OC\User\User|\PHPUnit_Framework_MockObject_MockObject $user */
|
||||||
$user = $this->createMock(IUser::class);
|
$user = $this->createMock(IUser::class);
|
||||||
|
|
Loading…
Reference in New Issue