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,
ShieldCheck,
ShieldOff,
StopCircle,
Trash,
X,
} from "lucide-react";
@@ -447,6 +448,31 @@ export default function UserCard(props: {
</CardContent>
<CardFooter className="gap-2 justify-between items-center">
<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
className="gap-2 z-10"
variant="secondary"
@@ -474,6 +500,7 @@ export default function UserCard(props: {
)}
</span>
</Button>
)}
</CardFooter>
</Card>
);

View File

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

View File

@@ -105,7 +105,7 @@ export const admin = <O extends AdminOptions>(options?: O) => {
const session = await getSessionFromCtx(ctx);
if (
(!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");
}