aboutsummaryrefslogtreecommitdiffstats
path: root/settings
diff options
context:
space:
mode:
authorLukas Reschke <lukas@owncloud.com>2014-12-09 18:36:40 +0100
committerLukas Reschke <lukas@owncloud.com>2014-12-10 12:07:34 +0100
commit5dc6406b7075a6f1db3ada7a9d0f5ddc93f58b18 (patch)
tree87221af31e42aaa9031672706752309b1ccc37db /settings
parent5398bbdc003a93f8652b7c7a88bc80e7710996c9 (diff)
downloadnextcloud-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.php56
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()));