Skip to content

Commit 3357550

Browse files
authored
Merge pull request #2504 from nextcloud/backport/2502/stable33
[stable33] Feat: Add role-based filtering for circle member queries
2 parents 02bc93d + 95f7d9a commit 3357550

3 files changed

Lines changed: 12 additions & 4 deletions

File tree

lib/Controller/LocalController.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,15 +473,16 @@ public function probeCircles(int $limit = -1, int $offset = 0): DataResponse {
473473
* @param bool $fullDetails
474474
* @param int $limit
475475
* @param string $search
476+
* @param int|null $role
476477
*
477478
* @return DataResponse
478479
* @throws OCSException
479480
*/
480-
public function members(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = ''): DataResponse {
481+
public function members(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = '', ?int $role = null): DataResponse {
481482
try {
482483
$this->setCurrentFederatedUser();
483484

484-
return new DataResponse($this->serializeArray($this->memberService->getMembers($circleId, $fullDetails, $limit, $search)));
485+
return new DataResponse($this->serializeArray($this->memberService->getMembers($circleId, $fullDetails, $limit, $search, $role)));
485486
} catch (Exception $e) {
486487
$this->e($e, ['circleId' => $circleId]);
487488
throw new OCSException($e->getMessage(), (int)$e->getCode());

lib/Db/MemberRequest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ public function getMembers(
204204
int $limit = 0,
205205
bool $fullDetails = false,
206206
string $search = '',
207+
?int $role = null,
207208
): array {
208209
if (is_null($probe)) {
209210
$probe = new MemberProbe();
@@ -257,6 +258,10 @@ public function getMembers(
257258
$qb->filterDirectMembership(CoreQueryBuilder::MEMBER, $probe->getFilterMember());
258259
}
259260

261+
if ($role !== null) {
262+
$qb->andWhere($qb->expr()->eq($qb->getDefaultSelectAlias() . '.level', $qb->createNamedParameter($role)));
263+
}
264+
260265
$qb->orderBy($qb->getDefaultSelectAlias() . '.level', 'desc');
261266
$qb->addOrderBy($qb->getDefaultSelectAlias() . '.cached_name', 'asc');
262267

lib/Service/MemberService.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,13 @@ public function getMemberById(
155155
* @param bool $fullDetails
156156
* @param int $limit
157157
* @param string $search
158+
* @param ?int $role
158159
*
159160
* @return Member[]
160161
* @throws InitiatorNotFoundException
161162
* @throws RequestBuilderException
162163
*/
163-
public function getMembers(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = ''): array {
164+
public function getMembers(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = '', ?int $role = null): array {
164165
$this->federatedUserService->mustHaveCurrentUser();
165166

166167
$probe = new MemberProbe();
@@ -176,7 +177,8 @@ public function getMembers(string $circleId, bool $fullDetails = false, int $lim
176177
$probe,
177178
$limit,
178179
$fullDetails,
179-
$search
180+
$search,
181+
$role,
180182
);
181183
}
182184

0 commit comments

Comments
 (0)