From 32794378d59585f8a032bfab094a8bc66f104d47 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 = [];