Added new permission types
This commit is contained in:
@@ -10,10 +10,11 @@ interface Props {
|
||||
onClick?: () => void;
|
||||
isSelected?: boolean;
|
||||
isLoading?: boolean;
|
||||
disabled?: boolean
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export default function IconCard({Icon, label, value, color, tooltip, onClick, className, isLoading, isSelected}: Props) {
|
||||
export default function IconCard({ Icon, label, value, color, tooltip, onClick, className, isLoading, disabled, isSelected }: Props) {
|
||||
const colorClasses: { [key in typeof color]: string } = {
|
||||
purple: "mti-purple-light",
|
||||
red: "mti-red-light",
|
||||
@@ -24,8 +25,9 @@ export default function IconCard({Icon, label, value, color, tooltip, onClick, c
|
||||
return (
|
||||
<button
|
||||
onClick={onClick}
|
||||
disabled={disabled}
|
||||
className={clsx(
|
||||
"bg-white border rounded-xl shadow p-4 flex flex-col gap-4 items-center text-center w-full h-52 justify-center cursor-pointer hover:shadow-lg hover:border-mti-purple-dark transition ease-in-out duration-300",
|
||||
"bg-white border rounded-xl shadow p-4 flex flex-col gap-4 items-center text-center w-full h-52 justify-center cursor-pointer hover:shadow-lg hover:border-mti-purple-dark transition ease-in-out duration-300 disabled:grayscale-0",
|
||||
tooltip && "tooltip tooltip-bottom",
|
||||
isSelected && `border border-solid border-${colorClasses[color]}`,
|
||||
className,
|
||||
|
||||
@@ -43,6 +43,10 @@ const USER_MANAGEMENT: PermissionLayout[] = [
|
||||
{ label: "Delete Teachers", key: "delete_teachers" },
|
||||
{ label: "Delete Corporate Accounts", key: "delete_corporates" },
|
||||
{ label: "Delete Master Corporate Accounts", key: "delete_mastercorporates" },
|
||||
{ label: "Create a Single User", key: "create_user" },
|
||||
{ label: "Create Users in Batch", key: "create_user_batch" },
|
||||
{ label: "Create a Single Code", key: "create_code" },
|
||||
{ label: "Create Codes in Batch", key: "create_code_batch" },
|
||||
]
|
||||
|
||||
const EXAM_MANAGEMENT: PermissionLayout[] = [
|
||||
|
||||
@@ -35,6 +35,7 @@ import { isAdmin } from "@/utils/users";
|
||||
import { getGradingSystemByEntities, getGradingSystemByEntity } from "@/utils/grading.be";
|
||||
import { Grading } from "@/interfaces";
|
||||
import { useRouter } from "next/router";
|
||||
import { useAllowedEntities } from "@/hooks/useEntityPermissions";
|
||||
|
||||
export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
|
||||
const user = await requestUser(req, res)
|
||||
@@ -66,6 +67,11 @@ export default function Admin({ user, entities, permissions, allUsers, entitiesG
|
||||
const [modalOpen, setModalOpen] = useState<string>();
|
||||
const router = useRouter()
|
||||
|
||||
const entitiesAllowCreateUser = useAllowedEntities(user, entities, 'create_user')
|
||||
const entitiesAllowCreateUsers = useAllowedEntities(user, entities, 'create_user_batch')
|
||||
const entitiesAllowCreateCode = useAllowedEntities(user, entities, 'create_code')
|
||||
const entitiesAllowCreateCodes = useAllowedEntities(user, entities, 'create_code_batch')
|
||||
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
@@ -80,7 +86,12 @@ export default function Admin({ user, entities, permissions, allUsers, entitiesG
|
||||
<ToastContainer />
|
||||
<Layout user={user} className="gap-6">
|
||||
<Modal isOpen={modalOpen === "batchCreateUser"} onClose={() => setModalOpen(undefined)} maxWidth="max-w-[85%]">
|
||||
<BatchCreateUser user={user} entities={entities} permissions={permissions} onFinish={() => setModalOpen(undefined)} />
|
||||
<BatchCreateUser
|
||||
user={user}
|
||||
entities={entitiesAllowCreateUser}
|
||||
permissions={permissions}
|
||||
onFinish={() => setModalOpen(undefined)}
|
||||
/>
|
||||
</Modal>
|
||||
<Modal isOpen={modalOpen === "batchCreateCode"} onClose={() => setModalOpen(undefined)}>
|
||||
<BatchCodeGenerator user={user} users={allUsers} permissions={permissions} onFinish={() => setModalOpen(undefined)} />
|
||||
@@ -89,7 +100,13 @@ export default function Admin({ user, entities, permissions, allUsers, entitiesG
|
||||
<CodeGenerator user={user} permissions={permissions} onFinish={() => setModalOpen(undefined)} />
|
||||
</Modal>
|
||||
<Modal isOpen={modalOpen === "createUser"} onClose={() => setModalOpen(undefined)}>
|
||||
<UserCreator user={user} entities={entities} users={allUsers} permissions={permissions} onFinish={() => setModalOpen(undefined)} />
|
||||
<UserCreator
|
||||
user={user}
|
||||
entities={entitiesAllowCreateUsers}
|
||||
users={allUsers}
|
||||
permissions={permissions}
|
||||
onFinish={() => setModalOpen(undefined)}
|
||||
/>
|
||||
</Modal>
|
||||
<Modal isOpen={modalOpen === "gradingSystem"} onClose={() => setModalOpen(undefined)}>
|
||||
<CorporateGradingSystem
|
||||
@@ -110,6 +127,7 @@ export default function Admin({ user, entities, permissions, allUsers, entitiesG
|
||||
color="purple"
|
||||
className="w-full h-full"
|
||||
onClick={() => setModalOpen("createCode")}
|
||||
disabled={entitiesAllowCreateCode.length > 0}
|
||||
/>
|
||||
<IconCard
|
||||
Icon={BsCodeSquare}
|
||||
@@ -117,6 +135,7 @@ export default function Admin({ user, entities, permissions, allUsers, entitiesG
|
||||
color="purple"
|
||||
className="w-full h-full"
|
||||
onClick={() => setModalOpen("batchCreateCode")}
|
||||
disabled={entitiesAllowCreateCodes.length > 0}
|
||||
/>
|
||||
<IconCard
|
||||
Icon={BsPersonFill}
|
||||
@@ -124,6 +143,7 @@ export default function Admin({ user, entities, permissions, allUsers, entitiesG
|
||||
color="purple"
|
||||
className="w-full h-full"
|
||||
onClick={() => setModalOpen("createUser")}
|
||||
disabled={entitiesAllowCreateUser.length > 0}
|
||||
/>
|
||||
<IconCard
|
||||
Icon={BsPeopleFill}
|
||||
@@ -131,6 +151,7 @@ export default function Admin({ user, entities, permissions, allUsers, entitiesG
|
||||
color="purple"
|
||||
className="w-full h-full"
|
||||
onClick={() => setModalOpen("batchCreateUser")}
|
||||
disabled={entitiesAllowCreateUsers.length > 0}
|
||||
/>
|
||||
{checkAccess(user, ["admin", "corporate", "developer", "mastercorporate"]) && (
|
||||
<IconCard
|
||||
|
||||
@@ -49,7 +49,11 @@ export type RolePermission =
|
||||
"delete_assignment" |
|
||||
"start_assignment" |
|
||||
"archive_assignment" |
|
||||
"view_entity_statistics"
|
||||
"view_entity_statistics" |
|
||||
"create_user" |
|
||||
"create_user_batch" |
|
||||
"create_code" |
|
||||
"create_code_batch"
|
||||
|
||||
export const DEFAULT_PERMISSIONS: RolePermission[] = [
|
||||
"view_students",
|
||||
@@ -110,5 +114,9 @@ export const ADMIN_PERMISSIONS: RolePermission[] = [
|
||||
"delete_assignment",
|
||||
"start_assignment",
|
||||
"archive_assignment",
|
||||
"view_entity_statistics"
|
||||
"view_entity_statistics",
|
||||
"create_user",
|
||||
"create_user_batch",
|
||||
"create_code",
|
||||
"create_code_batch"
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user