diff --git a/src/components/forms/EditUserForm.tsx b/src/components/forms/EditUserForm.tsx index a0cdcb8..7761091 100644 --- a/src/components/forms/EditUserForm.tsx +++ b/src/components/forms/EditUserForm.tsx @@ -7,7 +7,7 @@ import { } from "@/lib/actions"; import { zodResolver } from "@hookform/resolvers/zod"; import { SetUserTypeModelTypeEnum } from "juno-sdk/build/main/internal/index"; -import { useState } from "react"; +import { useState, useMemo } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import * as z from "zod"; @@ -29,6 +29,7 @@ import { SelectTrigger, SelectValue, } from "../ui/select"; +import { useUserSession, UserType } from "../providers/SessionProvider"; export const userTypeMap = { SUPERADMIN: 0, @@ -55,6 +56,23 @@ const EditUserForm = ({ initialUserData: UserColumn; onUserUpdate?: (updatedUser: UserColumn) => void; }) => { + const { user: currentUser } = useUserSession(); + + // Filter available user types based on current user's permissions + // SUPERADMIN can set any type + // ADMIN can only set USER type + // USER shouldn't be able to edit (but we'll still filter just in case) + const availableUserTypes = useMemo(() => { + if (!currentUser) return ["USER"]; + + if (currentUser.type === UserType.SUPERADMIN) { + return Object.keys(userTypeMap); + } else if (currentUser.type === UserType.ADMIN) { + return ["USER"]; + } else { + return ["USER"]; + } + }, [currentUser]); const setUserTypeForm = useForm>({ resolver: zodResolver(setUserTypeSchema), defaultValues: { @@ -194,7 +212,7 @@ const EditUserForm = ({ - {Object.keys(userTypeMap).map((type) => ( + {availableUserTypes.map((type) => ( {type}