Fix user and group listing with users that have an integer user id

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2018-09-12 09:40:27 +02:00
parent 039145c4d1
commit f0d48554d3
No known key found for this signature in database
GPG Key ID: 7076EA9751AACDDA
3 changed files with 18 additions and 16 deletions

View File

@ -74,7 +74,7 @@ abstract class AUserData extends OCSController {
/** /**
* creates a array with all user data * creates a array with all user data
* *
* @param $userId * @param string $userId
* @return array * @return array
* @throws OCSException * @throws OCSException
*/ */

View File

@ -186,26 +186,25 @@ class GroupsController extends AUserData {
* @throws OCSException * @throws OCSException
*/ */
public function getGroupUsersDetails(string $groupId, string $search = '', int $limit = null, int $offset = 0): DataResponse { public function getGroupUsersDetails(string $groupId, string $search = '', int $limit = null, int $offset = 0): DataResponse {
$user = $this->userSession->getUser(); $currentUser = $this->userSession->getUser();
$isSubadminOfGroup = false;
// Check the group exists // Check the group exists
$group = $this->groupManager->get($groupId); $group = $this->groupManager->get($groupId);
if ($group !== null) { if ($group !== null) {
$isSubadminOfGroup =$this->groupManager->getSubAdmin()->isSubAdminOfGroup($user, $group); $isSubadminOfGroup = $this->groupManager->getSubAdmin()->isSubAdminOfGroup($currentUser, $group);
} else { } else {
throw new OCSException('The requested group could not be found', \OCP\API::RESPOND_NOT_FOUND); throw new OCSException('The requested group could not be found', \OCP\API::RESPOND_NOT_FOUND);
} }
// Check subadmin has access to this group // Check subadmin has access to this group
if($this->groupManager->isAdmin($user->getUID()) if($this->groupManager->isAdmin($currentUser->getUID()) || $isSubadminOfGroup) {
|| $isSubadminOfGroup) { $users = $group->searchUsers($search, $limit, $offset);
$users = $this->groupManager->get($groupId)->searchUsers($search, $limit, $offset);
// Extract required number // Extract required number
$users = array_keys($users);
$usersDetails = []; $usersDetails = [];
foreach ($users as $userId) { foreach ($users as $user) {
/** @var IUser $user */
$userId = (string) $user->getUID();
$userData = $this->getUserData($userId); $userData = $this->getUserData($userId);
// Do not insert empty entry // Do not insert empty entry
if(!empty($userData)) { if(!empty($userData)) {

View File

@ -46,6 +46,7 @@ use OCP\IGroup;
use OCP\IGroupManager; use OCP\IGroupManager;
use OCP\ILogger; use OCP\ILogger;
use OCP\IRequest; use OCP\IRequest;
use OCP\IUser;
use OCP\IUserManager; use OCP\IUserManager;
use OCP\IUserSession; use OCP\IUserSession;
use OCP\L10N\IFactory; use OCP\L10N\IFactory;
@ -154,29 +155,31 @@ class UsersController extends AUserData {
* returns a list of users and their data * returns a list of users and their data
*/ */
public function getUsersDetails(string $search = '', $limit = null, $offset = 0): DataResponse { public function getUsersDetails(string $search = '', $limit = null, $offset = 0): DataResponse {
$user = $this->userSession->getUser(); $currentUser = $this->userSession->getUser();
$users = []; $users = [];
// Admin? Or SubAdmin? // Admin? Or SubAdmin?
$uid = $user->getUID(); $uid = $currentUser->getUID();
$subAdminManager = $this->groupManager->getSubAdmin(); $subAdminManager = $this->groupManager->getSubAdmin();
if ($this->groupManager->isAdmin($uid)){ if ($this->groupManager->isAdmin($uid)){
$users = $this->userManager->search($search, $limit, $offset); $users = $this->userManager->search($search, $limit, $offset);
} else if ($subAdminManager->isSubAdmin($user)) { $users = array_keys($users);
$subAdminOfGroups = $subAdminManager->getSubAdminsGroups($user); } else if ($subAdminManager->isSubAdmin($currentUser)) {
$subAdminOfGroups = $subAdminManager->getSubAdminsGroups($currentUser);
foreach ($subAdminOfGroups as $key => $group) { foreach ($subAdminOfGroups as $key => $group) {
$subAdminOfGroups[$key] = $group->getGID(); $subAdminOfGroups[$key] = $group->getGID();
} }
$users = []; $users = [];
foreach ($subAdminOfGroups as $group) { foreach ($subAdminOfGroups as $group) {
$users = array_merge($users, $this->groupManager->displayNamesInGroup($group, $search, $limit, $offset)); $users[] = array_keys($this->groupManager->displayNamesInGroup($group, $search, $limit, $offset));
} }
$users = array_merge(...$users);
} }
$users = array_keys($users);
$usersDetails = []; $usersDetails = [];
foreach ($users as $key => $userId) { foreach ($users as $userId) {
$userId = (string) $userId;
$userData = $this->getUserData($userId); $userData = $this->getUserData($userId);
// Do not insert empty entry // Do not insert empty entry
if (!empty($userData)) { if (!empty($userData)) {