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:
Roeland Jago Douma 2020-05-21 09:53:45 +02:00 committed by GitHub
commit cac844d915
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 32 deletions

View File

@ -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,25 +276,18 @@ 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)) { $aGroup = $this->get($groupId);
foreach ($groupIds as $groupId) { if ($aGroup instanceof IGroup) {
$aGroup = $this->get($groupId); $groups[$groupId] = $aGroup;
if ($aGroup instanceof IGroup) { } else {
$groups[$groupId] = $aGroup; $this->logger->debug('User "' . $uid . '" belongs to deleted group: "' . $groupId . '"', ['app' => 'core']);
} else {
$this->logger->debug('User "' . $uid . '" belongs to deleted group: "' . $groupId . '"', ['app' => 'core']);
}
}
} }
} }
$this->cachedUserGroups[$uid] = $groups;
return $this->cachedUserGroups[$uid]; return $groups;
} }
/** /**
@ -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];
} }
/** /**

View File

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