Renamed the admin type to corporate
This commit is contained in:
@@ -2,30 +2,30 @@ import {Type} from "@/interfaces/user";
|
||||
|
||||
export const PERMISSIONS = {
|
||||
generateCode: {
|
||||
student: ["teacher", "admin", "developer", "owner"],
|
||||
teacher: ["admin", "developer", "owner"],
|
||||
admin: ["owner", "developer"],
|
||||
student: ["teacher", "corporate", "developer", "owner"],
|
||||
teacher: ["corporate", "developer", "owner"],
|
||||
corporate: ["owner", "developer"],
|
||||
owner: ["developer", "owner"],
|
||||
developer: ["developer"],
|
||||
},
|
||||
deleteUser: {
|
||||
student: ["teacher", "admin", "developer", "owner"],
|
||||
teacher: ["admin", "developer", "owner"],
|
||||
admin: ["owner", "developer"],
|
||||
student: ["teacher", "corporate", "developer", "owner"],
|
||||
teacher: ["corporate", "developer", "owner"],
|
||||
corporate: ["owner", "developer"],
|
||||
owner: ["developer", "owner"],
|
||||
developer: ["developer"],
|
||||
},
|
||||
updateUser: {
|
||||
student: ["teacher", "admin", "developer", "owner"],
|
||||
teacher: ["admin", "developer", "owner"],
|
||||
admin: ["owner", "developer"],
|
||||
student: ["teacher", "corporate", "developer", "owner"],
|
||||
teacher: ["corporate", "developer", "owner"],
|
||||
corporate: ["owner", "developer"],
|
||||
owner: ["developer", "owner"],
|
||||
developer: ["developer"],
|
||||
},
|
||||
updateExpiryDate: {
|
||||
student: ["developer", "owner"],
|
||||
teacher: ["developer", "owner"],
|
||||
admin: ["owner", "developer"],
|
||||
corporate: ["owner", "developer"],
|
||||
owner: ["developer", "owner"],
|
||||
developer: ["developer"],
|
||||
},
|
||||
|
||||
@@ -103,10 +103,10 @@ export default function OwnerDashboard({user}: Props) {
|
||||
<BsArrowLeft className="text-xl" />
|
||||
<span>Back</span>
|
||||
</div>
|
||||
<h2 className="text-2xl font-semibold">Corporate ({users.filter((x) => x.type === "admin").length})</h2>
|
||||
<h2 className="text-2xl font-semibold">Corporate ({users.filter((x) => x.type === "corporate").length})</h2>
|
||||
</div>
|
||||
|
||||
<UserList user={user} filter={(x) => x.type === "admin"} />
|
||||
<UserList user={user} filter={(x) => x.type === "corporate"} />
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -131,7 +131,7 @@ export default function OwnerDashboard({user}: Props) {
|
||||
};
|
||||
|
||||
const InactiveCorporateList = () => {
|
||||
const filter = (x: User) => x.type === "admin" && (x.isDisabled || moment().isAfter(x.subscriptionExpirationDate));
|
||||
const filter = (x: User) => x.type === "corporate" && (x.isDisabled || moment().isAfter(x.subscriptionExpirationDate));
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -177,7 +177,7 @@ export default function OwnerDashboard({user}: Props) {
|
||||
<BsPersonFillGear className="text-mti-purple-light text-6xl" />
|
||||
<span className="flex flex-col gap-1 items-center text-xl">
|
||||
<span className="text-lg">Corporate</span>
|
||||
<span className="font-semibold text-mti-purple">{users.filter((x) => x.type === "admin").length}</span>
|
||||
<span className="font-semibold text-mti-purple">{users.filter((x) => x.type === "corporate").length}</span>
|
||||
</span>
|
||||
</div>
|
||||
<div className="bg-white rounded-xl shadow p-4 flex flex-col gap-4 items-center w-52 h-52 justify-center cursor-pointer hover:shadow-xl transition ease-in-out duration-300">
|
||||
@@ -207,7 +207,7 @@ export default function OwnerDashboard({user}: Props) {
|
||||
<span className="flex flex-col gap-1 items-center text-xl">
|
||||
<span className="text-lg text-center">Inactive Corporate</span>
|
||||
<span className="font-semibold text-mti-rose">
|
||||
{users.filter((x) => x.type === "admin" && (x.isDisabled || moment().isAfter(x.subscriptionExpirationDate))).length}
|
||||
{users.filter((x) => x.type === "corporate" && (x.isDisabled || moment().isAfter(x.subscriptionExpirationDate))).length}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
@@ -229,7 +229,7 @@ export default function OwnerDashboard({user}: Props) {
|
||||
<span className="p-4">Latest corporate</span>
|
||||
<div className="flex flex-col items-start h-96 overflow-scroll scrollbar-hide">
|
||||
{users
|
||||
.filter((x) => x.type === "admin")
|
||||
.filter((x) => x.type === "corporate")
|
||||
.sort((a, b) => dateSorter(a, b, "asc", "registrationDate"))
|
||||
.map((x) => (
|
||||
<UserDisplay key={x.id} {...x} />
|
||||
@@ -240,7 +240,7 @@ export default function OwnerDashboard({user}: Props) {
|
||||
<span className="p-4">Disabled Corporate</span>
|
||||
<div className="flex flex-col items-start h-96 overflow-scroll scrollbar-hide">
|
||||
{users
|
||||
.filter((x) => x.type === "admin" && x.isDisabled)
|
||||
.filter((x) => x.type === "corporate" && x.isDisabled)
|
||||
.map((x) => (
|
||||
<UserDisplay key={x.id} {...x} />
|
||||
))}
|
||||
@@ -282,7 +282,7 @@ export default function OwnerDashboard({user}: Props) {
|
||||
{users
|
||||
.filter(
|
||||
(x) =>
|
||||
x.type === "admin" &&
|
||||
x.type === "corporate" &&
|
||||
x.subscriptionExpirationDate &&
|
||||
moment().isAfter(moment(x.subscriptionExpirationDate).subtract(30, "days")),
|
||||
)
|
||||
@@ -307,9 +307,9 @@ export default function OwnerDashboard({user}: Props) {
|
||||
if (shouldReload) reload();
|
||||
}}
|
||||
onViewStudents={
|
||||
selectedUser.type === "admin" || selectedUser.type === "teacher" ? () => setPage("students") : undefined
|
||||
selectedUser.type === "corporate" || selectedUser.type === "teacher" ? () => setPage("students") : undefined
|
||||
}
|
||||
onViewTeachers={selectedUser.type === "admin" ? () => setPage("teachers") : undefined}
|
||||
onViewTeachers={selectedUser.type === "corporate" ? () => setPage("teachers") : undefined}
|
||||
{...selectedUser}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -65,5 +65,5 @@ export interface Group {
|
||||
disableEditing?: boolean;
|
||||
}
|
||||
|
||||
export type Type = "student" | "teacher" | "admin" | "owner" | "developer";
|
||||
export const userTypes: Type[] = ["student", "teacher", "admin", "owner", "developer"];
|
||||
export type Type = "student" | "teacher" | "corporate" | "owner" | "developer";
|
||||
export const userTypes: Type[] = ["student", "teacher", "corporate", "owner", "developer"];
|
||||
|
||||
@@ -24,7 +24,7 @@ export default function BatchCodeGenerator({user}: {user: User}) {
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
if (user && (user.type === "admin" || user.type === "teacher")) {
|
||||
if (user && (user.type === "corporate" || user.type === "teacher")) {
|
||||
setExpiryDate(user.subscriptionExpirationDate || null);
|
||||
}
|
||||
}, [user]);
|
||||
@@ -126,8 +126,8 @@ export default function BatchCodeGenerator({user}: {user: User}) {
|
||||
<Button
|
||||
className="w-44 2xl:w-48"
|
||||
variant="outline"
|
||||
onClick={() => generateCode("admin")}
|
||||
disabled={emails.length === 0 || isLoading || !PERMISSIONS.generateCode.admin.includes(user.type)}>
|
||||
onClick={() => generateCode("corporate")}
|
||||
disabled={emails.length === 0 || isLoading || !PERMISSIONS.generateCode.corporate.includes(user.type)}>
|
||||
Admin
|
||||
</Button>
|
||||
<Button
|
||||
|
||||
@@ -17,7 +17,7 @@ export default function CodeGenerator({user}: {user: User}) {
|
||||
const [isExpiryDateEnabled, setIsExpiryDateEnabled] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
if (user && (user.type === "admin" || user.type === "teacher")) {
|
||||
if (user && (user.type === "corporate" || user.type === "teacher")) {
|
||||
setExpiryDate(user.subscriptionExpirationDate || null);
|
||||
}
|
||||
}, [user]);
|
||||
@@ -75,8 +75,8 @@ export default function CodeGenerator({user}: {user: User}) {
|
||||
<Button
|
||||
className="w-44 2xl:w-48"
|
||||
variant="outline"
|
||||
onClick={() => generateCode("admin")}
|
||||
disabled={!PERMISSIONS.generateCode.admin.includes(user.type) || (isExpiryDateEnabled && expiryDate === null)}>
|
||||
onClick={() => generateCode("corporate")}
|
||||
disabled={!PERMISSIONS.generateCode.corporate.includes(user.type) || (isExpiryDateEnabled && expiryDate === null)}>
|
||||
Admin
|
||||
</Button>
|
||||
<Button
|
||||
|
||||
@@ -51,7 +51,7 @@ const CreatePanel = ({user, users, group, onCreate}: CreateDialogProps) => {
|
||||
const emailUsers = [...new Set(emails)].map((x) => users.find((y) => y.email.toLowerCase() === x)).filter((x) => x !== undefined);
|
||||
const filteredUsers = emailUsers.filter(
|
||||
(x) =>
|
||||
((user.type === "developer" || user.type === "owner" || user.type === "admin") &&
|
||||
((user.type === "developer" || user.type === "owner" || user.type === "corporate") &&
|
||||
(x?.type === "student" || x?.type === "teacher")) ||
|
||||
(user.type === "teacher" && x?.type === "student"),
|
||||
);
|
||||
@@ -140,7 +140,7 @@ export default function GroupList({user}: {user: User}) {
|
||||
}, [showDisclosure]);
|
||||
|
||||
useEffect(() => {
|
||||
if (user && (user.type === "admin" || user.type === "teacher")) {
|
||||
if (user && (user.type === "corporate" || user.type === "teacher")) {
|
||||
setFilterByUser(true);
|
||||
}
|
||||
}, [user]);
|
||||
|
||||
@@ -31,7 +31,9 @@ export default function UserList({user, filter}: {user: User; filter?: (user: Us
|
||||
useEffect(() => {
|
||||
if (user && users) {
|
||||
const filterUsers =
|
||||
user.type === "admin" || user.type === "student" ? users.filter((u) => groups.flatMap((g) => g.participants).includes(u.id)) : users;
|
||||
user.type === "corporate" || user.type === "student"
|
||||
? users.filter((u) => groups.flatMap((g) => g.participants).includes(u.id))
|
||||
: users;
|
||||
|
||||
const filteredUsers = filter ? filterUsers.filter(filter) : filterUsers;
|
||||
|
||||
@@ -141,9 +143,9 @@ export default function UserList({user, filter}: {user: User; filter?: (user: Us
|
||||
Teacher
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => updateAccountType(row.original, "admin")}
|
||||
onClick={() => updateAccountType(row.original, "corporate")}
|
||||
className="text-sm !py-2 !px-4"
|
||||
disabled={row.original.type === "admin" || !PERMISSIONS.generateCode["admin"].includes(user.type)}>
|
||||
disabled={row.original.type === "corporate" || !PERMISSIONS.generateCode["corporate"].includes(user.type)}>
|
||||
Admin
|
||||
</Button>
|
||||
<Button
|
||||
|
||||
@@ -163,7 +163,7 @@ export default function Home() {
|
||||
<Layout user={user}>
|
||||
{user.type === "student" && <StudentDashboard user={user} />}
|
||||
{user.type === "teacher" && <StudentDashboard user={user} />}
|
||||
{user.type === "admin" && <StudentDashboard user={user} />}
|
||||
{user.type === "corporate" && <StudentDashboard user={user} />}
|
||||
{user.type === "owner" && <StudentDashboard user={user} />}
|
||||
{user.type === "developer" && <OwnerDashboard user={user} />}
|
||||
</Layout>
|
||||
|
||||
@@ -278,7 +278,7 @@ export default function History({user}: {user: User}) {
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{(user.type === "admin" || user.type === "teacher") && groups.length > 0 && (
|
||||
{(user.type === "corporate" || user.type === "teacher") && groups.length > 0 && (
|
||||
<Select
|
||||
options={users
|
||||
.filter((x) => groups.flatMap((y) => y.participants).includes(x.id))
|
||||
|
||||
@@ -184,7 +184,7 @@ export default function Stats() {
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{(user.type === "admin" || user.type === "teacher") && groups.length > 0 && (
|
||||
{(user.type === "corporate" || user.type === "teacher") && groups.length > 0 && (
|
||||
<Select
|
||||
className="w-full"
|
||||
options={users
|
||||
|
||||
@@ -1,201 +0,0 @@
|
||||
import {Type, User} from "@/interfaces/user";
|
||||
|
||||
interface Permissions {
|
||||
createUser: {[key in Type]: boolean};
|
||||
deleteUser: {[key in Type]: boolean};
|
||||
manageUser: {[key in Type]: boolean};
|
||||
viewUsers: {[key in Type]: boolean};
|
||||
viewStats: boolean;
|
||||
viewUserStats: boolean;
|
||||
viewClassStats: boolean;
|
||||
createClass: boolean;
|
||||
manageClass: boolean;
|
||||
deleteClass: boolean;
|
||||
}
|
||||
|
||||
const permissions: {[key in Type]: Permissions} = {
|
||||
student: {
|
||||
createUser: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: false,
|
||||
teacher: false,
|
||||
},
|
||||
deleteUser: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: false,
|
||||
teacher: false,
|
||||
},
|
||||
manageUser: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: false,
|
||||
teacher: false,
|
||||
},
|
||||
viewUsers: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: false,
|
||||
teacher: false,
|
||||
},
|
||||
createClass: false,
|
||||
deleteClass: false,
|
||||
manageClass: false,
|
||||
viewStats: true,
|
||||
viewUserStats: false,
|
||||
viewClassStats: false,
|
||||
},
|
||||
teacher: {
|
||||
createUser: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: false,
|
||||
},
|
||||
deleteUser: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: false,
|
||||
},
|
||||
manageUser: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: false,
|
||||
},
|
||||
viewUsers: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: false,
|
||||
},
|
||||
createClass: true,
|
||||
deleteClass: true,
|
||||
manageClass: true,
|
||||
viewStats: true,
|
||||
viewUserStats: true,
|
||||
viewClassStats: true,
|
||||
},
|
||||
admin: {
|
||||
createUser: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
deleteUser: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
manageUser: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
viewUsers: {
|
||||
admin: false,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
createClass: true,
|
||||
deleteClass: true,
|
||||
manageClass: true,
|
||||
viewStats: true,
|
||||
viewUserStats: true,
|
||||
viewClassStats: true,
|
||||
},
|
||||
owner: {
|
||||
createUser: {
|
||||
admin: true,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
deleteUser: {
|
||||
admin: true,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
manageUser: {
|
||||
admin: true,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
viewUsers: {
|
||||
admin: true,
|
||||
developer: false,
|
||||
owner: false,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
createClass: true,
|
||||
deleteClass: true,
|
||||
manageClass: true,
|
||||
viewStats: true,
|
||||
viewUserStats: true,
|
||||
viewClassStats: true,
|
||||
},
|
||||
developer: {
|
||||
createUser: {
|
||||
admin: true,
|
||||
developer: true,
|
||||
owner: true,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
deleteUser: {
|
||||
admin: true,
|
||||
developer: true,
|
||||
owner: true,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
manageUser: {
|
||||
admin: true,
|
||||
developer: true,
|
||||
owner: true,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
viewUsers: {
|
||||
admin: true,
|
||||
developer: true,
|
||||
owner: true,
|
||||
student: true,
|
||||
teacher: true,
|
||||
},
|
||||
createClass: true,
|
||||
deleteClass: true,
|
||||
manageClass: true,
|
||||
viewStats: true,
|
||||
viewUserStats: true,
|
||||
viewClassStats: true,
|
||||
},
|
||||
};
|
||||
|
||||
export default function getPermissions(user: User) {
|
||||
return permissions[user.type];
|
||||
}
|
||||
Reference in New Issue
Block a user