Loading src/app/app/users/UserListClient.tsx +4 −0 Original line number Diff line number Diff line Loading @@ -153,6 +153,10 @@ export default function UserlistClient(props: UserListClientProps) { return; } if (userId === 1) { addToast("You cannot delete the admin user account.", "warning"); return; } console.log(`Deleting user with ID: ${userId}`); try { Loading src/app/app/users/edit/[id]/actions.ts +4 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,10 @@ export async function createOrEditUserAction(params: { }) { const { id, email, password, enabled, roles } = params; if (id === 1) { throw new Error("You cannot edit the admin user account."); } const cookieStore = cookies(); const token = (await cookieStore).get('access_token')?.value; Loading src/app/app/users/edit/[id]/page.tsx +6 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ import UserEditClient from './userEditClient'; import checkRoles from '@/libs/checkRoles'; import { redirect } from 'next/navigation'; Loading @@ -10,6 +11,11 @@ export default async function UserEditServer({ params }: { params: Promise<{ id: await checkRoles('ADMIN') const userID = (await params).id; if (userID === '1') { redirect('/app/users') // Redirect to user list if trying to edit admin user } return ( <> Loading src/app/app/users/userRow.tsx +5 −4 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ export default function UserRow(props: { className="disabled:opacity-50 disabled:cursor-not-allowed" checked={selected} onChange={(e) => onSelectChange(user.id, e.target.checked)} disabled={user.id === props.connectedUserID} disabled={user.id === props.connectedUserID || user.id === 1} /> </td> <td className="border border-gray-300 px-4 py-2">{user.id}</td> Loading @@ -40,7 +40,7 @@ export default function UserRow(props: { className="disabled:opacity-50 disabled:cursor-not-allowed peer sr-only" name={`enable-user-${user.id}`} checked={enabledState} disabled={user.id === props.connectedUserID} disabled={user.id === props.connectedUserID || user.id === 1} onChange={(e) => { console.log('Toggle changed for user', user.id, 'to', e.target.checked); handleToggle(user.id, e.target.checked) Loading @@ -62,7 +62,7 @@ export default function UserRow(props: { <td className="border border-gray-300 px-4 py-2 text-center"> <div className="flex gap-2 justify-center"> <button disabled={user.id === props.connectedUserID || user.forceLogin} disabled={user.id === props.connectedUserID || user.id === 1 || user.forceLogin} name={`${user.id}_forceLogin`} className="rounded-full bg-yellow-500 px-3 py-1 text-sm leading-5 font-semibold text-white hover:bg-yellow-700 items-center gap-2 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed" type="button" Loading @@ -72,7 +72,7 @@ export default function UserRow(props: { <span>Force Re-Login</span> </button> <button disabled={user.id === props.connectedUserID} disabled={user.id === props.connectedUserID || user.id === 1} name={`${user.id}_delete`} className="rounded-full bg-red-500 px-3 py-1 text-sm leading-5 font-semibold text-white hover:bg-red-700 items-center gap-2 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed" type="button" Loading @@ -82,6 +82,7 @@ export default function UserRow(props: { <span>Delete</span> </button> <button disabled={user.id === 1} name={`${user.id}_edit`} className="rounded-full bg-blue-500 px-3 py-1 text-sm leading-5 font-semibold text-white hover:bg-blue-700 items-center gap-2 cursor-pointer" type="button" Loading Loading
src/app/app/users/UserListClient.tsx +4 −0 Original line number Diff line number Diff line Loading @@ -153,6 +153,10 @@ export default function UserlistClient(props: UserListClientProps) { return; } if (userId === 1) { addToast("You cannot delete the admin user account.", "warning"); return; } console.log(`Deleting user with ID: ${userId}`); try { Loading
src/app/app/users/edit/[id]/actions.ts +4 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,10 @@ export async function createOrEditUserAction(params: { }) { const { id, email, password, enabled, roles } = params; if (id === 1) { throw new Error("You cannot edit the admin user account."); } const cookieStore = cookies(); const token = (await cookieStore).get('access_token')?.value; Loading
src/app/app/users/edit/[id]/page.tsx +6 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ import UserEditClient from './userEditClient'; import checkRoles from '@/libs/checkRoles'; import { redirect } from 'next/navigation'; Loading @@ -10,6 +11,11 @@ export default async function UserEditServer({ params }: { params: Promise<{ id: await checkRoles('ADMIN') const userID = (await params).id; if (userID === '1') { redirect('/app/users') // Redirect to user list if trying to edit admin user } return ( <> Loading
src/app/app/users/userRow.tsx +5 −4 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ export default function UserRow(props: { className="disabled:opacity-50 disabled:cursor-not-allowed" checked={selected} onChange={(e) => onSelectChange(user.id, e.target.checked)} disabled={user.id === props.connectedUserID} disabled={user.id === props.connectedUserID || user.id === 1} /> </td> <td className="border border-gray-300 px-4 py-2">{user.id}</td> Loading @@ -40,7 +40,7 @@ export default function UserRow(props: { className="disabled:opacity-50 disabled:cursor-not-allowed peer sr-only" name={`enable-user-${user.id}`} checked={enabledState} disabled={user.id === props.connectedUserID} disabled={user.id === props.connectedUserID || user.id === 1} onChange={(e) => { console.log('Toggle changed for user', user.id, 'to', e.target.checked); handleToggle(user.id, e.target.checked) Loading @@ -62,7 +62,7 @@ export default function UserRow(props: { <td className="border border-gray-300 px-4 py-2 text-center"> <div className="flex gap-2 justify-center"> <button disabled={user.id === props.connectedUserID || user.forceLogin} disabled={user.id === props.connectedUserID || user.id === 1 || user.forceLogin} name={`${user.id}_forceLogin`} className="rounded-full bg-yellow-500 px-3 py-1 text-sm leading-5 font-semibold text-white hover:bg-yellow-700 items-center gap-2 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed" type="button" Loading @@ -72,7 +72,7 @@ export default function UserRow(props: { <span>Force Re-Login</span> </button> <button disabled={user.id === props.connectedUserID} disabled={user.id === props.connectedUserID || user.id === 1} name={`${user.id}_delete`} className="rounded-full bg-red-500 px-3 py-1 text-sm leading-5 font-semibold text-white hover:bg-red-700 items-center gap-2 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed" type="button" Loading @@ -82,6 +82,7 @@ export default function UserRow(props: { <span>Delete</span> </button> <button disabled={user.id === 1} name={`${user.id}_edit`} className="rounded-full bg-blue-500 px-3 py-1 text-sm leading-5 font-semibold text-white hover:bg-blue-700 items-center gap-2 cursor-pointer" type="button" Loading