diff options
author | Côme Chilliet <91878298+come-nc@users.noreply.github.com> | 2025-03-10 14:21:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-10 14:21:48 +0100 |
commit | e8b90c83daea0d3884cc66814f3114463386c3f9 (patch) | |
tree | 6f6773d50b8047dde1468717c0eb91cb9e421799 /lib | |
parent | 15fe20b6e3dd3d64177cdb481f5216354beaf43c (diff) | |
parent | c59400dea135279a59dd58530d28558e5bc9a97b (diff) | |
download | nextcloud-server-e8b90c83daea0d3884cc66814f3114463386c3f9.tar.gz nextcloud-server-e8b90c83daea0d3884cc66814f3114463386c3f9.zip |
Merge pull request #51108 from nextcloud/fix/fix-disabled-user-list-for-saml-subadmin
Fix disabled user list for SAML group subadmin
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/User/Manager.php | 54 |
1 files changed, 15 insertions, 39 deletions
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php index aa2acb55782..62a7b39be16 100644 --- a/lib/private/User/Manager.php +++ b/lib/private/User/Manager.php @@ -523,19 +523,25 @@ class Manager extends PublicEmitter implements IUserManager { /** * returns how many users per backend exist in the requested groups (if supported by backend) * - * @param IGroup[] $groups an array of gid to search in - * @return array|int an array of backend class as key and count number as value - * if $hasLoggedIn is true only an int is returned + * @param IGroup[] $groups an array of groups to search in + * @param int $limit limit to stop counting + * @return array{int,int} total number of users, and number of disabled users in the given groups, below $limit. If limit is reached, -1 is returned for number of disabled users */ - public function countUsersOfGroups(array $groups) { + public function countUsersAndDisabledUsersOfGroups(array $groups, int $limit): array { $users = []; + $disabled = []; foreach ($groups as $group) { - $usersIds = array_map(function ($user) { - return $user->getUID(); - }, $group->getUsers()); - $users = array_merge($users, $usersIds); + foreach ($group->getUsers() as $user) { + $users[$user->getUID()] = 1; + if (!$user->isEnabled()) { + $disabled[$user->getUID()] = 1; + } + if (count($users) >= $limit) { + return [count($users),-1]; + } + } } - return count(array_unique($users)); + return [count($users),count($disabled)]; } /** @@ -602,36 +608,6 @@ class Manager extends PublicEmitter implements IUserManager { } /** - * returns how many users are disabled in the requested groups - * - * @param array $groups groupids to search - * @return int - * @since 14.0.0 - */ - public function countDisabledUsersOfGroups(array $groups): int { - $queryBuilder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); - $queryBuilder->select($queryBuilder->createFunction('COUNT(DISTINCT ' . $queryBuilder->getColumnName('uid') . ')')) - ->from('preferences', 'p') - ->innerJoin('p', 'group_user', 'g', $queryBuilder->expr()->eq('p.userid', 'g.uid')) - ->where($queryBuilder->expr()->eq('appid', $queryBuilder->createNamedParameter('core'))) - ->andWhere($queryBuilder->expr()->eq('configkey', $queryBuilder->createNamedParameter('enabled'))) - ->andWhere($queryBuilder->expr()->eq('configvalue', $queryBuilder->createNamedParameter('false'), IQueryBuilder::PARAM_STR)) - ->andWhere($queryBuilder->expr()->in('gid', $queryBuilder->createNamedParameter($groups, IQueryBuilder::PARAM_STR_ARRAY))); - - $result = $queryBuilder->execute(); - $count = $result->fetchOne(); - $result->closeCursor(); - - if ($count !== false) { - $count = (int)$count; - } else { - $count = 0; - } - - return $count; - } - - /** * returns how many users have logged in once * * @return int |