From 636aaf78518e4c7aa0ecdcb2458007e18d411f9c 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 87cc06fe59338..5f0a5d971d8f6 100644 --- a/lib/private/Settings/AuthorizedGroupMapper.php +++ b/lib/private/Settings/AuthorizedGroupMapper.php @@ -15,7 +15,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; @@ -36,15 +35,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();