mirror of
https://github.com/nextcloud/server.git
synced 2026-04-27 09:08:22 -04:00
feat(provisioning_api): Add endpoint for fetching user subadmin groups with details
Signed-off-by: Christopher Ng <chrng8@gmail.com>
This commit is contained in:
parent
32c3e18781
commit
80a2fd25cf
2 changed files with 45 additions and 0 deletions
|
|
@ -46,6 +46,7 @@ return [
|
|||
['root' => '/cloud', 'name' => 'Users#addToGroup', 'url' => '/users/{userId}/groups', 'verb' => 'POST'],
|
||||
['root' => '/cloud', 'name' => 'Users#removeFromGroup', 'url' => '/users/{userId}/groups', 'verb' => 'DELETE'],
|
||||
['root' => '/cloud', 'name' => 'Users#getUserSubAdminGroups', 'url' => '/users/{userId}/subadmins', 'verb' => 'GET'],
|
||||
['root' => '/cloud', 'name' => 'Users#getUserSubAdminGroupsDetails', 'url' => '/users/{userId}/subadmins/details', 'verb' => 'GET'],
|
||||
['root' => '/cloud', 'name' => 'Users#addSubAdmin', 'url' => '/users/{userId}/subadmins', 'verb' => 'POST'],
|
||||
['root' => '/cloud', 'name' => 'Users#removeSubAdmin', 'url' => '/users/{userId}/subadmins', 'verb' => 'DELETE'],
|
||||
['root' => '/cloud', 'name' => 'Users#resendWelcomeMessage', 'url' => '/users/{userId}/welcome', 'verb' => 'POST'],
|
||||
|
|
|
|||
|
|
@ -1481,6 +1481,50 @@ class UsersController extends AUserDataOCSController {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoSubAdminRequired
|
||||
*
|
||||
* Get a list of the groups the user is a subadmin of, with details
|
||||
*
|
||||
* @param string $userId ID of the user
|
||||
* @return DataResponse<Http::STATUS_OK, array{groups: list<Provisioning_APIGroupDetails>}, array{}>
|
||||
* @throws OCSException
|
||||
*
|
||||
* 200: Users subadmin groups returned
|
||||
*/
|
||||
#[NoAdminRequired]
|
||||
public function getUserSubAdminGroupsDetails(string $userId): DataResponse {
|
||||
$loggedInUser = $this->userSession->getUser();
|
||||
|
||||
$targetUser = $this->userManager->get($userId);
|
||||
if ($targetUser === null) {
|
||||
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
|
||||
}
|
||||
|
||||
$isAdmin = $this->groupManager->isAdmin($loggedInUser->getUID());
|
||||
$isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($loggedInUser->getUID());
|
||||
if ($targetUser->getUID() === $loggedInUser->getUID() || $isAdmin || $isDelegatedAdmin) {
|
||||
$subAdminManager = $this->groupManager->getSubAdmin();
|
||||
$groups = array_map(
|
||||
function (IGroup $group) {
|
||||
return [
|
||||
'id' => $group->getGID(),
|
||||
'displayname' => $group->getDisplayName(),
|
||||
'usercount' => $group->count(),
|
||||
'disabled' => $group->countDisabled(),
|
||||
'canAdd' => $group->canAddUser(),
|
||||
'canRemove' => $group->canRemoveUser(),
|
||||
];
|
||||
},
|
||||
array_values($subAdminManager->getSubAdminsGroups($targetUser)),
|
||||
);
|
||||
return new DataResponse([
|
||||
'groups' => $groups,
|
||||
]);
|
||||
}
|
||||
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a user to a group
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in a new issue