Skip to content

Commit 8af6b16

Browse files
committed
Routes updates
Add role to acces admin management (RespoCE & Arbitre)
1 parent a3d61d7 commit 8af6b16

File tree

23 files changed

+373
-218
lines changed

23 files changed

+373
-218
lines changed

backend/src/controllers/auth.controller.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Request, Response } from 'express';
22
import * as auth_service from '../services/auth.service';
33
import * as user_service from '../services/user.service';
44
import * as email_service from '../services/email.service';
5+
import * as role_service from '../services/role.service';
56
import bigInt from 'big-integer';
67
import { Error, Ok, Unauthorized } from '../utils/responses';
78
import { decodeToken } from '../utils/token';
@@ -60,8 +61,17 @@ export const handlecasticket = async (req: Request, res: Response) => {
6061
if (!id){ Error(res,{ msg: "Pas d'id" }); return;}
6162

6263
await user_service.updateUserStudent( CASuser.givenName, CASuser.sn, CASuser.email);
64+
65+
// Récupérer les rôles de l'utilisateur
66+
const userRoles = await role_service.getUserRoles(user.id); // [{ roleId, roleName }]
67+
68+
// Ajouter les rôles à l'objet utilisateur
69+
const enrichedUser = {
70+
...user,
71+
roles: userRoles,
72+
};
6373

64-
const token = auth_service.generateToken(user);
74+
const token = auth_service.generateToken(enrichedUser);
6575

6676

6777
Ok(res, { data: { token } })

backend/src/controllers/role.controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export const getUserRoles = async (req: Request, res: Response) => {
134134
return;
135135
}
136136

137-
const userRoles = await role_service.getUserRoles(userId);
137+
const userRoles = await role_service.getUserRoles(Number(userId));
138138
Ok(res,{ data: userRoles });
139139
return;
140140
} catch (error) {

backend/src/controllers/team.controller.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,21 @@ export const getTeamUsers = async (req: Request, res: Response) => {
117117

118118
}
119119

120+
export const getAllTeamsWithUsers = async (req: Request, res: Response) => {
121+
122+
try {
123+
const teamUsers = await team_service.getAllTeamsWithUsers();
124+
Ok(res,{ data: teamUsers });
125+
return;
126+
} catch (error) {
127+
console.error(error);
128+
Error(res,{ msg: "Erreur interne lors de la récupération des utilisateurs avec leurs rôles." });
129+
return;
130+
131+
}
132+
133+
}
134+
120135
export const getTeamFaction = async (req: Request, res: Response) => {
121136

122137
const {teamId} = req.query;

backend/src/database/initdb/initrole.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { roleSchema } from "../../schemas/Basic/role.schema";
55
// Liste des rôles avec leurs descriptions
66
const roles = [
77
{ name: "Animation", description: "Animer, divertir et motiver les CE et les nouveaux étudiants tout au long de la pré-inté et de l’inté." },
8+
{ name: "Arbitre", description: "Arbitrer les différents défis pendant le semaine d'intégration." },
89
{ name: "Bouffe", description: "Prévoir, organiser et coordonner tous les repas de l’inté. La bouffe c’est sacré !" },
910
{ name: "Cahier de vacances", description: "Élaborer le futur cahier de vacances des nouveaux avec des petits exercices et blagues." },
1011
{ name: "Communication & Graphisme", description: "Préparer et gérer toute la communication de l’intégration, créer une charte graphique." },

backend/src/middlewares/auth.middleware.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import { Request, Response, NextFunction } from "express";
2-
import jwt, { JwtPayload } from "jsonwebtoken";
32
import { Unauthorized } from "../utils/responses"; // Assurez-vous que cette fonction est bien définie
4-
import { jwtSecret } from "../utils/secret";
53
import { decodeToken } from "../utils/token";
64

75

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,41 @@
1-
import { Request, Response, NextFunction } from 'express';
2-
import { Unauthorized } from '../utils/responses';
1+
import { Request, Response, NextFunction } from "express";
2+
import { Unauthorized } from "../utils/responses"; // adapte selon ton projet
33

4-
// Middleware pour vérifier le rôle
5-
export const checkRole = (requiredRole: string) => {
4+
export const checkRole = (
5+
requiredPermission?: string,
6+
requiredRoles?: string[]
7+
) => {
68
return (req: Request, res: Response, next: NextFunction) => {
9+
const user = req.user;
710

8-
if (!req.user) {
9-
Unauthorized(res,{ msg: 'Accès non autorisé' });
10-
return;
11+
if (!user) {
12+
Unauthorized(res, { msg: "Accès non autorisé" });
13+
return;
1114
}
12-
const user = req.user
15+
1316
try {
14-
if (user.userPermission !== requiredRole && user.userPermission !== 'Admin'){
15-
Unauthorized(res,{ msg: 'Accès interdit, rôle insuffisant' });
16-
return;
17+
const isAdmin = user.userPermission === "Admin";
18+
19+
const hasPermission =
20+
!requiredPermission || user.userPermission === requiredPermission;
21+
22+
const hasRole =
23+
!requiredRoles ||
24+
(Array.isArray(user.userRoles) &&
25+
user.userRoles.some((role: { roleName: string }) =>
26+
requiredRoles.includes(role.roleName)
27+
));
28+
29+
if (!isAdmin && !(hasPermission || hasRole)) {
30+
Unauthorized(res, {
31+
msg: "Accès interdit, rôle ou permission insuffisants",
32+
});
33+
return;
1734
}
35+
1836
next();
1937
} catch (err) {
20-
Unauthorized(res,{ msg: 'Token invalide ou expiré' });
21-
return;
38+
Unauthorized(res, { msg: "Token invalide ou expiré" });
2239
}
2340
};
24-
};
41+
};

backend/src/routes/challenge.routes.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import { checkRole } from "../middlewares/user.middleware";
55
const challengeRouter = express.Router();
66

77
// Admin routes
8-
challengeRouter.post("/admin/challenge", checkRole("Admin"), challengeController.createChallenge);
9-
challengeRouter.delete("/admin/delete", checkRole("Admin"), challengeController.deleteChallenge);
10-
challengeRouter.put("/admin/updatechallenge", checkRole("Admin"), challengeController.updateChallenge);
11-
challengeRouter.post("/admin/validate", checkRole("Admin"), challengeController.validateChallenge);
12-
challengeRouter.post("/admin/unvalidate", checkRole("Admin"), challengeController.unvalidateChallenge);
13-
challengeRouter.get("/admin/challenges", checkRole("Admin"), challengeController.getAllChallenges);
14-
challengeRouter.get("/admin/validatedchallenges", checkRole("Admin"), challengeController.getValidatedChallenges);
15-
challengeRouter.post("/admin/assignpoints", checkRole("Admin"), challengeController.addPointsToFaction);
8+
challengeRouter.post("/admin/challenge", checkRole("Admin", ["Arbitre"]), challengeController.createChallenge);
9+
challengeRouter.delete("/admin/delete", checkRole("Admin", ["Arbitre"]), challengeController.deleteChallenge);
10+
challengeRouter.put("/admin/updatechallenge", checkRole("Admin",["Arbitre"]), challengeController.updateChallenge);
11+
challengeRouter.post("/admin/validate", checkRole("Admin", ["Arbitre"]), challengeController.validateChallenge);
12+
challengeRouter.post("/admin/unvalidate",checkRole("Admin", ["Arbitre"]), challengeController.unvalidateChallenge);
13+
challengeRouter.get("/admin/challenges", checkRole("Admin", ["Arbitre"]), challengeController.getAllChallenges);
14+
challengeRouter.get("/admin/validatedchallenges", checkRole("Admin", ["Arbitre"]), challengeController.getValidatedChallenges);
15+
challengeRouter.post("/admin/assignpoints", checkRole("Admin", ["Arbitre"]), challengeController.addPointsToFaction);
1616

1717

1818
// User routes

backend/src/routes/faction.routes.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ const factionRouter = express.Router();
66

77

88
// Admin routes
9-
factionRouter.get("/admin/factions",checkRole("Admin") ,factionController.getFactions);
10-
factionRouter.get("/admin/faction",checkRole("Admin") ,factionController.getFaction);
11-
factionRouter.post("/admin/createfaction",checkRole("Admin") ,factionController.createFaction);
12-
factionRouter.delete("/admin/deletefaction",checkRole("Admin") ,factionController.deleteFaction);
9+
factionRouter.get("/admin/factions",checkRole("Admin", ["Respo CE", "Arbitre"]) ,factionController.getFactions);
10+
factionRouter.get("/admin/faction",checkRole("Admin", ["Respo CE"]) ,factionController.getFaction);
11+
factionRouter.post("/admin/createfaction",checkRole("Admin", ["Respo CE"]) ,factionController.createFaction);
12+
factionRouter.delete("/admin/deletefaction",checkRole("Admin", ["Respo CE"]) ,factionController.deleteFaction);
1313

1414
//Student Routes
1515
factionRouter.get("/user/factions",factionController.getFactions);

backend/src/routes/team.routes.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ const teamRouter = express.Router();
1010
teamRouter.post("/user/create",checkRole("Student") ,teamController.createNewTeam);
1111

1212
//Admin Routes
13-
teamRouter.post("/admin/createlight",checkRole("Admin") ,teamController.createNewTeamLight);
14-
teamRouter.get("/admin/teams",checkRole("Admin") ,teamController.getTeams);
15-
teamRouter.get("/admin/teamswithfactions",checkRole("Admin") ,teamController.getTeamsWithfactions);
16-
teamRouter.get("/admin/teamfaction",checkRole("Admin") ,teamController.getTeamFaction);
17-
teamRouter.put("/admin/modify",checkRole("Admin") ,teamController.modifyTeam);
18-
teamRouter.get("/admin/teamusers",checkRole("Admin") ,teamController.getTeamUsers);
19-
teamRouter.delete("/admin/delete",checkRole("Admin") ,teamController.deleteTeam);
13+
teamRouter.post("/admin/createlight",checkRole("Admin", ["Respo CE"]) ,teamController.createNewTeamLight);
14+
teamRouter.get("/admin/teams",checkRole("Admin", ["Respo CE", "Arbitre"]) ,teamController.getTeams);
15+
teamRouter.get("/admin/teamswithfactions",checkRole("Admin", ["Respo CE"]) ,teamController.getTeamsWithfactions);
16+
teamRouter.get("/admin/teamfaction",checkRole("Admin", ["Respo CE"]) ,teamController.getTeamFaction);
17+
teamRouter.get("/admin/teamswithusers",checkRole("Admin", ["Respo CE"]) ,teamController.getAllTeamsWithUsers);
18+
teamRouter.put("/admin/modify",checkRole("Admin", ["Respo CE"]) ,teamController.modifyTeam);
19+
teamRouter.get("/admin/teamusers",checkRole("Admin", ["Respo CE"]) ,teamController.getTeamUsers);
20+
teamRouter.delete("/admin/delete",checkRole("Admin", ["Respo CE"]) ,teamController.deleteTeam);
2021
teamRouter.post('/admin/distributeteam',checkRole("Admin"), teamController.teamDistribution);
2122

2223

backend/src/routes/user.routes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const userRouter = express.Router();
99
userRouter.get('/admin/getusersbypermission', checkRole("Admin"), userController.getUsersByPermission);
1010
userRouter.patch('/admin/user/:userId', checkRole("Admin"), userController.adminUpdateUser);
1111
userRouter.delete('/admin/user/:userId', checkRole("Admin"), userController.adminDeleteUser);
12-
userRouter.get('/admin/getusers', checkRole("Admin"), userController.getUsers);
12+
userRouter.get('/admin/getusers', checkRole("Admin"), userController.getUsersAdmin);
1313
userRouter.post('/admin/syncnewstudent', checkRole("Admin"), userController.syncNewstudent);
1414

1515

0 commit comments

Comments
 (0)