Spaces:
Sleeping
Sleeping
File size: 1,837 Bytes
05c5ed5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | import "server-only";
import { getSession } from "lib/auth/server";
import { AdminUsersQuery, AdminUsersPaginated } from "app-types/admin";
import {
requireAdminPermission,
requireUserListPermission,
} from "lib/auth/permissions";
import pgAdminRepository from "lib/db/pg/repositories/admin-respository.pg";
export const ADMIN_USER_LIST_LIMIT = 10;
export const DEFAULT_SORT_BY = "createdAt";
export const DEFAULT_SORT_DIRECTION = "desc";
/**
* Require an admin session
* This is a wrapper around the getSession function
* that throws an error if the user is not an admin
*
* @deprecated Use requireAdminPermission() from lib/auth/permissions instead
*/
export async function requireAdminSession(): Promise<
NonNullable<Awaited<ReturnType<typeof getSession>>>
> {
const session = await getSession();
if (!session) {
throw new Error("Unauthorized: No session found");
}
// Use our new permission system internally
await requireAdminPermission("access admin functions");
return session;
}
/**
* Get paginated users using our custom repository with improved search capabilities
* Only admins can list and search users
*/
export async function getAdminUsers(
query?: AdminUsersQuery,
): Promise<AdminUsersPaginated> {
// Use our new permission system
await requireUserListPermission("list users in admin panel");
await getSession();
try {
// Use our custom repository with improved search
const result = await pgAdminRepository.getUsers({
...query,
limit: query?.limit ?? ADMIN_USER_LIST_LIMIT,
offset: query?.offset ?? 0,
sortBy: query?.sortBy ?? DEFAULT_SORT_BY,
sortDirection: query?.sortDirection ?? DEFAULT_SORT_DIRECTION,
});
return result;
} catch (error) {
console.error("Error getting admin users", error);
throw error;
}
}
|