From c9b35b16735003a3273242b2185db7ea611bdcf8 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 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/private/Settings/AuthorizedGroupMapper.php b/lib/private/Settings/AuthorizedGroupMapper.php index e057ab94c9d1f..c8331fa594db8 100644 --- a/lib/private/Settings/AuthorizedGroupMapper.php +++ b/lib/private/Settings/AuthorizedGroupMapper.php @@ -14,7 +14,6 @@ use OCP\DB\Exception; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; -use OCP\IGroup; use OCP\IGroupManager; use OCP\IUser; use OCP\Server; @@ -35,15 +34,15 @@ public function findAllClassesForUser(IUser $user): array { $qb = $this->db->getQueryBuilder(); $groupManager = Server::get(IGroupManager::class); - $groups = $groupManager->getUserGroups($user); - if (count($groups) === 0) { + $groupIds = $groupManager->getUserGroupIds($user); + if (count($groupIds) === 0) { return []; } /** @var list $rows */ $rows = $qb->select('class') ->from($this->getTableName(), 'auth') - ->where($qb->expr()->in('group_id', array_map(static fn (IGroup $group) => $qb->createNamedParameter($group->getGID()), $groups), IQueryBuilder::PARAM_STR)) + ->where($qb->expr()->in('group_id', $qb->createNamedParameter($groupIds, IQueryBuilder::PARAM_STR_ARRAY))) ->executeQuery() ->fetchFirstColumn();