demo: add impersonation stop button and admin user configuration

This commit is contained in:
Bereket Engida
2025-03-04 14:33:04 +03:00
parent b5177bcfb8
commit c1216a988d
3 changed files with 57 additions and 28 deletions

View File

@@ -36,6 +36,7 @@ import {
QrCode, QrCode,
ShieldCheck, ShieldCheck,
ShieldOff, ShieldOff,
StopCircle,
Trash, Trash,
X, X,
} from "lucide-react"; } from "lucide-react";
@@ -447,6 +448,31 @@ export default function UserCard(props: {
</CardContent> </CardContent>
<CardFooter className="gap-2 justify-between items-center"> <CardFooter className="gap-2 justify-between items-center">
<ChangePassword /> <ChangePassword />
{session?.session.impersonatedBy ? (
<Button
className="gap-2 z-10"
variant="secondary"
onClick={async () => {
setIsSignOut(true);
await client.admin.stopImpersonating();
setIsSignOut(false);
toast.info("Impersonation stopped successfully");
router.push("/admin");
}}
disabled={isSignOut}
>
<span className="text-sm">
{isSignOut ? (
<Loader2 size={15} className="animate-spin" />
) : (
<div className="flex items-center gap-2">
<StopCircle size={16} color="red" />
Stop Impersonation
</div>
)}
</span>
</Button>
) : (
<Button <Button
className="gap-2 z-10" className="gap-2 z-10"
variant="secondary" variant="secondary"
@@ -474,6 +500,7 @@ export default function UserCard(props: {
)} )}
</span> </span>
</Button> </Button>
)}
</CardFooter> </CardFooter>
</Card> </Card>
); );

View File

@@ -153,7 +153,9 @@ export const auth = betterAuth({
passkey(), passkey(),
openAPI(), openAPI(),
bearer(), bearer(),
admin(), admin({
adminUserIds: ["EXD5zjob2SD6CBWcEQ6OpLRHcyoUbnaB"],
}),
multiSession(), multiSession(),
oAuthProxy(), oAuthProxy(),
nextCookies(), nextCookies(),

View File

@@ -105,7 +105,7 @@ export const admin = <O extends AdminOptions>(options?: O) => {
const session = await getSessionFromCtx(ctx); const session = await getSessionFromCtx(ctx);
if ( if (
(!session?.session || !opts.adminRoles.includes(session.user.role)) && (!session?.session || !opts.adminRoles.includes(session.user.role)) &&
!opts.adminUserIds?.includes(session?.session?.user.id) !opts.adminUserIds?.includes(session?.user.id || "")
) { ) {
throw new APIError("UNAUTHORIZED"); throw new APIError("UNAUTHORIZED");
} }