mirror of
https://github.com/logto-io/logto.git
synced 2024-12-16 20:26:19 -05:00
feat(core): filter users by exclude role id (#2846)
This commit is contained in:
parent
225ccfed0a
commit
2eb1cbbe10
1 changed files with 11 additions and 4 deletions
|
@ -1,7 +1,7 @@
|
|||
import { emailRegEx, passwordRegEx, phoneRegEx, usernameRegEx } from '@logto/core-kit';
|
||||
import { arbitraryObjectGuard, userInfoSelectFields, UserRole } from '@logto/schemas';
|
||||
import { tryThat } from '@logto/shared';
|
||||
import { conditional, has, pick } from '@silverhand/essentials';
|
||||
import { conditional, deduplicate, has, pick } from '@silverhand/essentials';
|
||||
import { boolean, literal, object, string } from 'zod';
|
||||
|
||||
import { isTrue } from '#src/env-set/parameters.js';
|
||||
|
@ -28,7 +28,11 @@ import {
|
|||
hasUserWithPhone,
|
||||
findUsersByRoleName,
|
||||
} from '#src/queries/user.js';
|
||||
import { deleteUsersRolesByUserIdAndRoleId, insertUsersRoles } from '#src/queries/users-roles.js';
|
||||
import {
|
||||
deleteUsersRolesByUserIdAndRoleId,
|
||||
findUsersRolesByRoleId,
|
||||
insertUsersRoles,
|
||||
} from '#src/queries/users-roles.js';
|
||||
import assertThat from '#src/utils/assert-that.js';
|
||||
import { parseSearchParamsForSearch } from '#src/utils/search.js';
|
||||
|
||||
|
@ -43,9 +47,12 @@ export default function adminUserRoutes<T extends AuthedRouter>(router: T) {
|
|||
async () => {
|
||||
const search = parseSearchParamsForSearch(searchParams);
|
||||
const hideAdminUser = isTrue(searchParams.get('hideAdminUser'));
|
||||
|
||||
const excludeRoleId = searchParams.get('excludeRoleId');
|
||||
const excludeUsersRoles = excludeRoleId ? await findUsersRolesByRoleId(excludeRoleId) : [];
|
||||
const excludeUserIdsByRole = excludeUsersRoles.map(({ userId }) => userId);
|
||||
const adminUsers = hideAdminUser ? await findUsersByRoleName(UserRole.Admin) : [];
|
||||
const excludeUserIds = adminUsers.map(({ id }) => id);
|
||||
const excludeUserIdsByAdmin = adminUsers.map(({ id }) => id);
|
||||
const excludeUserIds = deduplicate([...excludeUserIdsByRole, ...excludeUserIdsByAdmin]);
|
||||
|
||||
const [{ count }, users] = await Promise.all([
|
||||
countUsers(search, excludeUserIds),
|
||||
|
|
Loading…
Reference in a new issue