Added users 2FA statsu to userstable

This commit is contained in:
J. Newing
2025-07-08 10:12:20 -04:00
parent 2a6298e9eb
commit 0f3a5ce8ba
4 changed files with 41 additions and 6 deletions

View File

@@ -49,7 +49,8 @@ async function queryUsers(orgId: string, limit: number, offset: number) {
roleName: roles.name, roleName: roles.name,
isOwner: userOrgs.isOwner, isOwner: userOrgs.isOwner,
idpName: idp.name, idpName: idp.name,
idpId: users.idpId idpId: users.idpId,
twoFactorEnabled: users.twoFactorEnabled,
}) })
.from(users) .from(users)
.leftJoin(userOrgs, eq(users.userId, userOrgs.userId)) .leftJoin(userOrgs, eq(users.userId, userOrgs.userId))

View File

@@ -34,6 +34,7 @@ export type UserRow = {
status: string; status: string;
role: string; role: string;
isOwner: boolean; isOwner: boolean;
isTwoFactorEnabled: boolean;
}; };
type UsersTableProps = { type UsersTableProps = {
@@ -170,6 +171,39 @@ export default function UsersTable({ users: u }: UsersTableProps) {
); );
} }
}, },
{
accessorKey: "isTwoFactorEnabled",
header: ({ column }) => {
return (
<Button
variant="ghost"
onClick={() =>
column.toggleSorting(column.getIsSorted() === "asc")
}
>
2FA Enabled
<ArrowUpDown className="ml-2 h-4 w-4" />
</Button>
);
},
cell: ({ row }) => {
const userRow = row.original;
return (
<div className="flex flex-row items-center gap-2">
<span>{userRow.isTwoFactorEnabled && (
<span className="text-green-500">
{t('enabled')}
</span>
) || (
<span className="text-white/50">
{t('disabled')}
</span>
)}</span>
</div>
);
}
},
{ {
id: "actions", id: "actions",
cell: ({ row }) => { cell: ({ row }) => {

View File

@@ -45,9 +45,6 @@ import { useTranslations } from "next-intl";
export default function AccessControlsPage() { export default function AccessControlsPage() {
const { orgUser: user, updateOrgUser } = userOrgUserContext(); const { orgUser: user, updateOrgUser } = userOrgUserContext();
console.log("User:", user);
const api = createApiClient(useEnvContext()); const api = createApiClient(useEnvContext());
const { orgId } = useParams(); const { orgId } = useParams();
@@ -224,7 +221,7 @@ export default function AccessControlsPage() {
<p className="text-xs text-muted-foreground ml-6"> <p className="text-xs text-muted-foreground ml-6">
When enabled, the user will be required to set up their authenticator app on their next login. When enabled, the user will be required to set up their authenticator app on their next login.
{user.twoFactorEnabled && ( {user.twoFactorEnabled && (
<span className="text-blue-600"> This user currently has 2FA enabled.</span> <span className="text-primary"> This user currently has 2FA enabled.</span>
)} )}
</p> </p>
</div> </div>
@@ -246,6 +243,8 @@ export default function AccessControlsPage() {
</Button> </Button>
</SettingsSectionFooter> </SettingsSectionFooter>
</SettingsSection> </SettingsSection>
</SettingsContainer> </SettingsContainer>
); );
} }

View File

@@ -81,7 +81,8 @@ export default async function UsersPage(props: UsersPageProps) {
idpName: user.idpName || t('idpNameInternal'), idpName: user.idpName || t('idpNameInternal'),
status: t('userConfirmed'), status: t('userConfirmed'),
role: user.isOwner ? t('accessRoleOwner') : user.roleName || t('accessRoleMember'), role: user.isOwner ? t('accessRoleOwner') : user.roleName || t('accessRoleMember'),
isOwner: user.isOwner || false isOwner: user.isOwner || false,
isTwoFactorEnabled: user.twoFactorEnabled || false,
}; };
}); });