Skip to content

Commit 51ce7c9

Browse files
authored
Merge pull request #23 from ungdev/dev
Routes updates & Add role to acces admin management (RespoCE & Arbitre)
2 parents 51fc178 + 50fc8c7 commit 51ce7c9

29 files changed

+422
-258
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/email.routes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { checkRole } from '../middlewares/user.middleware';
55

66
const emailRouter = express.Router();
77

8-
emailRouter.post('/admin/sendemail', checkRole("Admin"), emailController.handleSendEmail);
9-
emailRouter.post('/admin/previewemail', checkRole("Admin"), emailController.handlePreviewEmail);
8+
emailRouter.post('/admin/sendemail', checkRole("Admin",[]), emailController.handleSendEmail);
9+
emailRouter.post('/admin/previewemail', checkRole("Admin",[]), emailController.handlePreviewEmail);
1010

1111
export default emailRouter;

backend/src/routes/event.routes.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import { authenticateUser } from '../middlewares/auth.middleware';
66
const eventRouter = express.Router();
77

88
// User routes
9-
eventRouter.get("/user/shotgunstatus",checkRole("Student"), eventController.checkShotgunStatus);
10-
eventRouter.get("/user/preregisterstatus",checkRole("Student"), eventController.checkPreRegisterStatus);
11-
eventRouter.post("/user/shotgunattempt",checkRole("Student"), eventController.shotgunAttempt);
9+
eventRouter.get("/user/shotgunstatus",checkRole("Student",[]), eventController.checkShotgunStatus);
10+
eventRouter.get("/user/preregisterstatus",checkRole("Student",[]), eventController.checkPreRegisterStatus);
11+
eventRouter.post("/user/shotgunattempt",checkRole("Student",[]), eventController.shotgunAttempt);
1212

1313
// Admin routes
14-
eventRouter.post("/admin/shotguntoggle",checkRole("Admin"),eventController.toggleShotgun);
15-
eventRouter.post("/admin/preregistrationtoggle",checkRole("Admin"), eventController.togglePreRegistration);
14+
eventRouter.post("/admin/shotguntoggle",checkRole("Admin",[]),eventController.toggleShotgun);
15+
eventRouter.post("/admin/preregistrationtoggle",checkRole("Admin",[]), eventController.togglePreRegistration);
1616

1717
export default eventRouter;

backend/src/routes/export.routes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { checkRole } from '../middlewares/user.middleware';
55
const exportRouter = express.Router();
66

77
// Route d'inscription
8-
exportRouter.post('/admin/export',checkRole("Admin"), exportController.exportAllDataToSheets)
8+
exportRouter.post('/admin/export',checkRole("Admin",[]), exportController.exportAllDataToSheets)
99

1010

1111

0 commit comments

Comments
 (0)