diff options
author | Lukas Reschke <lukas@owncloud.com> | 2014-12-09 18:36:40 +0100 |
---|---|---|
committer | Lukas Reschke <lukas@owncloud.com> | 2014-12-10 12:07:34 +0100 |
commit | 5dc6406b7075a6f1db3ada7a9d0f5ddc93f58b18 (patch) | |
tree | 87221af31e42aaa9031672706752309b1ccc37db /settings | |
parent | 5398bbdc003a93f8652b7c7a88bc80e7710996c9 (diff) | |
download | nextcloud-server-5dc6406b7075a6f1db3ada7a9d0f5ddc93f58b18.tar.gz nextcloud-server-5dc6406b7075a6f1db3ada7a9d0f5ddc93f58b18.zip |
Add filter for 'backend' to user REST route
This adds a "backend" type filter to the index REST route which is a pre-requisite for https://github.com/owncloud/core/issues/12620
For example when calling `index.php/settings/users/users?offset=0&limit=10&gid=&pattern=&backend=OC_User_Database` only users within the backend `OC_User_Database` would be shown. (requires sending a CSRF token as well)
Depends upon https://github.com/owncloud/core/pull/12711
Diffstat (limited to 'settings')
-rw-r--r-- | settings/controller/userscontroller.php | 56 |
1 files changed, 39 insertions, 17 deletions
diff --git a/settings/controller/userscontroller.php b/settings/controller/userscontroller.php index 589b0a888cb..25fa5ca2ed6 100644 --- a/settings/controller/userscontroller.php +++ b/settings/controller/userscontroller.php @@ -11,6 +11,7 @@ namespace OC\Settings\Controller; use OC\AppFramework\Http; +use OC\User\Manager; use OC\User\User; use \OCP\AppFramework\Controller; use OCP\AppFramework\Http\DataResponse; @@ -85,45 +86,66 @@ class UsersController extends Controller { } /** + * @param array $userIDs + * @return IUser[] + */ + private function getUsersForUID(array $userIDs) { + $users = []; + foreach ($userIDs as $uid) { + $users[] = $this->userManager->get($uid); + } + return $users; + } + + /** * @NoAdminRequired * * @param int $offset * @param int $limit - * @param string $gid - * @param string $pattern + * @param string $gid GID to filter for + * @param string $pattern Pattern to search for in the username + * @param string $backend Backend to filter for (class-name) * @return DataResponse * * TODO: Tidy up and write unit tests - code is mainly static method calls */ - public function index($offset = 0, $limit = 10, $gid = '', $pattern = '') { + public function index($offset = 0, $limit = 10, $gid = '', $pattern = '', $backend = '') { // FIXME: The JS sends the group '_everyone' instead of no GID for the "all users" group. if($gid === '_everyone') { $gid = ''; } + + // Remove backends + if(!empty($backend)) { + $activeBackends = $this->userManager->getBackends(); + $this->userManager->clearBackends(); + foreach($activeBackends as $singleActiveBackend) { + if($backend === get_class($singleActiveBackend)) { + $this->userManager->registerBackend($singleActiveBackend); + } + } + } + $users = array(); if ($this->isAdmin) { + if($gid !== '') { - $batch = $this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset); + $batch = $this->getUsersForUID($this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset)); } else { - // FIXME: Remove static method call - $batch = \OC_User::getDisplayNames($pattern, $limit, $offset); + $batch = $this->userManager->search(''); } - foreach ($batch as $uid => $displayname) { - $users[] = $this->formatUserForIndex($this->userManager->get($uid)); + foreach ($batch as $user) { + $users[] = $this->formatUserForIndex($user); } + } else { - $groups = \OC_SubAdmin::getSubAdminsGroups($this->userSession->getUser()->getUID()); - if($gid !== '' && in_array($gid, $groups)) { - $groups = array($gid); - } elseif($gid !== '') { - //don't you try to investigate loops you must not know about - $groups = array(); + if($gid !== '' && !in_array($gid, \OC_SubAdmin::getSubAdminsGroups($this->userSession->getUser()->getUID()))) { + $gid = ''; } - $batch = \OC_Group::usersInGroups($groups, $pattern, $limit, $offset); - foreach ($batch as $uid) { - $user = $this->userManager->get($uid); + $batch = $this->getUsersForUID($this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset)); + foreach ($batch as $user) { // Only add the groups, this user is a subadmin of $userGroups = array_intersect($this->groupManager->getUserGroupIds($user), \OC_SubAdmin::getSubAdminsGroups($this->userSession->getUser()->getUID())); |