Started implementing the roles permissions

This commit is contained in:
Tiago Ribeiro
2024-10-10 19:13:18 +01:00
parent c43ab9a911
commit 55204e2ce1
67 changed files with 1357 additions and 1134 deletions

View File

@@ -7,7 +7,8 @@ import { EntityWithRoles } from "@/interfaces/entity";
import { Assignment } from "@/interfaces/results";
import { Group, Stat, User } from "@/interfaces/user";
import { sessionOptions } from "@/lib/session";
import { dateSorter, filterBy, mapBy, serialize } from "@/utils";
import { dateSorter, filterBy, mapBy, redirect, serialize } from "@/utils";
import { requestUser } from "@/utils/api";
import { getAssignments, getEntitiesAssignments } from "@/utils/assignments.be";
import { getEntitiesWithRoles } from "@/utils/entities.be";
import { getGroups, getGroupsByEntities } from "@/utils/groups.be";
@@ -47,24 +48,10 @@ interface Props {
}
export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
const user = req.session.user as User | undefined;
const user = await requestUser(req, res)
if (!user) return redirect("/login")
if (!user) {
return {
redirect: {
destination: "/login",
permanent: false,
},
};
}
if (!checkAccess(user, ["admin", "developer"]))
return {
redirect: {
destination: "/dashboard",
permanent: false,
},
};
if (!checkAccess(user, ["admin", "developer"])) return redirect("/")
const users = await getUsers();
const entities = await getEntitiesWithRoles();

View File

@@ -7,7 +7,8 @@ import { EntityWithRoles } from "@/interfaces/entity";
import { Assignment } from "@/interfaces/results";
import { Group, Stat, User } from "@/interfaces/user";
import { sessionOptions } from "@/lib/session";
import { dateSorter, filterBy, mapBy, serialize } from "@/utils";
import { dateSorter, filterBy, mapBy, redirect, serialize } from "@/utils";
import { requestUser } from "@/utils/api";
import { getEntitiesAssignments } from "@/utils/assignments.be";
import { getEntitiesWithRoles } from "@/utils/entities.be";
import { getGroupsByEntities } from "@/utils/groups.be";
@@ -45,24 +46,10 @@ interface Props {
}
export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
const user = req.session.user as User | undefined;
const user = await requestUser(req, res)
if (!user) return redirect("/login")
if (!user) {
return {
redirect: {
destination: "/login",
permanent: false,
},
};
}
if (!checkAccess(user, ["admin", "developer", "corporate"]))
return {
redirect: {
destination: "/dashboard",
permanent: false,
},
};
if (!checkAccess(user, ["admin", "developer", "corporate"])) return redirect("/")
const entityIDS = mapBy(user.entities, "id") || [];

View File

@@ -7,7 +7,8 @@ import { EntityWithRoles } from "@/interfaces/entity";
import { Assignment } from "@/interfaces/results";
import { Group, Stat, User } from "@/interfaces/user";
import { sessionOptions } from "@/lib/session";
import { dateSorter, filterBy, mapBy, serialize } from "@/utils";
import { dateSorter, filterBy, mapBy, redirect, serialize } from "@/utils";
import { requestUser } from "@/utils/api";
import { getAssignments, getEntitiesAssignments } from "@/utils/assignments.be";
import { getEntitiesWithRoles } from "@/utils/entities.be";
import { getGroups, getGroupsByEntities } from "@/utils/groups.be";
@@ -47,24 +48,10 @@ interface Props {
}
export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
const user = req.session.user as User | undefined;
const user = await requestUser(req, res)
if (!user) return redirect("/login")
if (!user) {
return {
redirect: {
destination: "/login",
permanent: false,
},
};
}
if (!checkAccess(user, ["admin", "developer"]))
return {
redirect: {
destination: "/dashboard",
permanent: false,
},
};
if (!checkAccess(user, ["admin", "developer"])) return redirect("/")
const users = await getUsers();
const entities = await getEntitiesWithRoles();

View File

@@ -1,25 +1,14 @@
import {User} from "@/interfaces/user";
import {sessionOptions} from "@/lib/session";
import { requestUser } from "@/utils/api";
import {withIronSessionSsr} from "iron-session/next";
import { redirect } from "next/navigation";
export const getServerSideProps = withIronSessionSsr(async ({req, res}) => {
const user = req.session.user as User | undefined;
const user = await requestUser(req, res)
if (!user) return redirect("/login")
if (!user) {
return {
redirect: {
destination: "/login",
permanent: false,
},
};
}
return {
redirect: {
destination: `/dashboard/${user.type}`,
permanent: false,
},
};
return redirect(`/dashboard/${user.type}`)
}, sessionOptions);
export default function Dashboard() {

View File

@@ -7,7 +7,8 @@ import { EntityWithRoles } from "@/interfaces/entity";
import { Assignment } from "@/interfaces/results";
import { Group, Stat, User } from "@/interfaces/user";
import { sessionOptions } from "@/lib/session";
import { dateSorter, filterBy, mapBy, serialize } from "@/utils";
import { dateSorter, filterBy, mapBy, redirect, serialize } from "@/utils";
import { requestUser } from "@/utils/api";
import { getEntitiesAssignments } from "@/utils/assignments.be";
import { getEntitiesWithRoles } from "@/utils/entities.be";
import { getGroupsByEntities } from "@/utils/groups.be";
@@ -47,24 +48,11 @@ interface Props {
}
export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
const user = req.session.user as User | undefined;
if (!user) {
return {
redirect: {
destination: "/login",
permanent: false,
},
};
}
const user = await requestUser(req, res)
if (!user) return redirect("/login")
if (!checkAccess(user, ["admin", "developer", "mastercorporate"]))
return {
redirect: {
destination: "/dashboard",
permanent: false,
},
};
return redirect("/")
const entityIDS = mapBy(user.entities, "id") || [];

View File

@@ -14,7 +14,8 @@ import {Assignment} from "@/interfaces/results";
import {Stat, User} from "@/interfaces/user";
import {sessionOptions} from "@/lib/session";
import useExamStore from "@/stores/examStore";
import {mapBy, serialize} from "@/utils";
import {mapBy, redirect, serialize} from "@/utils";
import { requestUser } from "@/utils/api";
import {activeAssignmentFilter} from "@/utils/assignments";
import {getAssignmentsByAssignee} from "@/utils/assignments.be";
import {getEntitiesWithRoles, getEntityWithRoles} from "@/utils/entities.be";
@@ -48,24 +49,11 @@ interface Props {
}
export const getServerSideProps = withIronSessionSsr(async ({req, res}) => {
const user = req.session.user as User | undefined;
if (!user) {
return {
redirect: {
destination: "/login",
permanent: false,
},
};
}
const user = await requestUser(req, res)
if (!user) return redirect("/login")
if (!checkAccess(user, ["admin", "developer", "student"]))
return {
redirect: {
destination: "/dashboard",
permanent: false,
},
};
return redirect("/")
const entityIDS = mapBy(user.entities, "id") || [];

View File

@@ -7,7 +7,7 @@ import { EntityWithRoles } from "@/interfaces/entity";
import { Assignment } from "@/interfaces/results";
import { Group, Stat, User } from "@/interfaces/user";
import { sessionOptions } from "@/lib/session";
import { dateSorter, filterBy, mapBy, serialize } from "@/utils";
import { dateSorter, filterBy, mapBy, redirect, serialize } from "@/utils";
import { getEntitiesAssignments } from "@/utils/assignments.be";
import { getEntitiesWithRoles } from "@/utils/entities.be";
import { getGroupsByEntities } from "@/utils/groups.be";
@@ -23,6 +23,7 @@ import { useRouter } from "next/router";
import { useMemo } from "react";
import { BsClipboard2Data, BsEnvelopePaper, BsPaperclip, BsPeople, BsPersonFill } from "react-icons/bs";
import { ToastContainer } from "react-toastify";
import { requestUser } from "@/utils/api";
interface Props {
user: User;
@@ -34,24 +35,11 @@ interface Props {
}
export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
const user = req.session.user as User | undefined;
if (!user) {
return {
redirect: {
destination: "/login",
permanent: false,
},
};
}
const user = await requestUser(req, res)
if (!user) return redirect("/login")
if (!checkAccess(user, ["admin", "developer", "teacher"]))
return {
redirect: {
destination: "/dashboard",
permanent: false,
},
};
return redirect("/")
const entityIDS = mapBy(user.entities, "id") || [];