feat: add global auth settings and pending users

This commit is contained in:
2026-07-02 06:27:32 -07:00
parent f6b7924d0c
commit 4bb4312b08
24 changed files with 2831 additions and 23 deletions

View File

@@ -1,5 +1,6 @@
import { redirect } from "next/navigation";
import { PendingAssignment } from "@/modules/auth/components/PendingAssignment";
import { getBootstrapState, getCurrentAuthContext } from "@/modules/core/server/auth";
import { AppShell } from "@/modules/shared/components/AppShell";
@@ -20,6 +21,10 @@ export default async function AppLayout({ children }: AppLayoutProps): Promise<R
redirect("/login");
}
if (!context.organization && context.permissions.length === 0) {
return <PendingAssignment account={context.account} />;
}
return (
<AppShell account={context.account} permissions={context.permissions}>
{children}

View File

@@ -0,0 +1,32 @@
import { redirect } from "next/navigation";
import { Badge } from "@/components/ui/badge";
import { getCurrentAuthContext } from "@/modules/core/server/auth";
import { hasPermission } from "@/modules/core/server/permissions";
import { getSystemSettings } from "@/modules/core/server/system-settings";
import { GlobalSettingsClient } from "@/modules/settings/components/GlobalSettingsClient";
export default async function GlobalSettingsPage(): Promise<React.ReactElement> {
const context = await getCurrentAuthContext();
if (!context) {
redirect("/login");
}
if (!hasPermission(context.permissions, "platform:manage")) {
redirect("/app/dashboard");
}
const settings = await getSystemSettings();
return (
<div className="flex flex-col gap-5">
<section>
<Badge variant="success">Global</Badge>
<h2 className="mt-3 text-xl font-semibold"></h2>
<p className="mt-1 text-sm text-muted-foreground">OIDC </p>
</section>
<GlobalSettingsClient settings={settings} />
</div>
);
}

View File

@@ -10,6 +10,7 @@ import type { RoleId } from "@/modules/core/types";
import { TableToolbar } from "@/modules/settings/components/TableToolbar";
import { UserAccountActions, UserManagementClient } from "@/modules/settings/components/UserManagementClient";
import { getPage, getPageCount, getSearchParam, paginate, type SearchParams } from "@/modules/settings/lib/pagination";
import { UserAvatar } from "@/modules/shared/components/UserAvatar";
type UsersPageProps = {
searchParams?: Promise<SearchParams>;
@@ -105,8 +106,13 @@ export default async function UsersPage({ searchParams }: UsersPageProps): Promi
{visibleAccounts.map((account) => (
<tr className="table-row-enter hover:bg-secondary/45" key={account.id}>
<td className="px-4 py-3">
<p className="font-medium">{account.name}</p>
<p className="text-xs text-muted-foreground">{account.email}</p>
<div className="flex items-center gap-3">
<UserAvatar avatarUrl={account.avatarUrl} name={account.name} size="sm" />
<div className="min-w-0">
<p className="truncate font-medium">{account.name}</p>
<p className="truncate text-xs text-muted-foreground">{account.email}</p>
</div>
</div>
</td>
<td className="px-4 py-3">{formatRoleLabel(account.role)}</td>
<td className="px-4 py-3 text-muted-foreground">{account.organization ?? "-"}</td>