From 883c21c3f748d803d52babaf1a44ae75ee2451e5 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Mon, 6 Jul 2026 10:51:34 +0200 Subject: [PATCH] perf: Don't fetch full group object in AuthorizedGroupMapper This is very expensive when multiple group backends are enabled as we don't cache which groups is included in which backend unlike in the User Manager. Signed-off-by: Carl Schwan --- lib/private/Settings/AuthorizedGroupMapper.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/private/Settings/AuthorizedGroupMapper.php b/lib/private/Settings/AuthorizedGroupMapper.php index b622459426b16..1c17db8df5511 100644 --- a/lib/private/Settings/AuthorizedGroupMapper.php +++ b/lib/private/Settings/AuthorizedGroupMapper.php @@ -11,7 +11,6 @@ use OCP\DB\Exception; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; -use OCP\IGroup; use OCP\IGroupManager; use OCP\IUser; @@ -31,16 +30,14 @@ public function findAllClassesForUser(IUser $user): array { /** @var IGroupManager $groupManager */ $groupManager = \OC::$server->get(IGroupManager::class); - $groups = $groupManager->getUserGroups($user); - if (count($groups) === 0) { + $groupIds = $groupManager->getUserGroupIds($user); + if (count($groupIds) === 0) { return []; } $result = $qb->select('class') ->from($this->getTableName(), 'auth') - ->where($qb->expr()->in('group_id', array_map(function (IGroup $group) use ($qb) { - return $qb->createNamedParameter($group->getGID()); - }, $groups), IQueryBuilder::PARAM_STR)) + ->where($qb->expr()->in('group_id', $qb->createNamedParameter($groupIds, IQueryBuilder::PARAM_STR_ARRAY))) ->executeQuery(); $classes = [];