Skip to content

Commit d08d5e7

Browse files
committed
Deploy permissions 🎉
1 parent 76ef34e commit d08d5e7

File tree

26 files changed

+611
-694
lines changed

26 files changed

+611
-694
lines changed

__frontend/controllers/admin.js

Lines changed: 57 additions & 167 deletions
Large diffs are not rendered by default.

__frontend/controllers/forum.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const axios = require('axios')
22
const path = require('path');
3-
const { statusUser } = require('../functions');
3+
const { statusUser, hasPermissions } = require('../functions');
44
const config = require('../config');
55
const { WebhookClient } = require('discord.js')
66
const WebhookReport = new WebhookClient(config.webhook.forumReport.id, config.webhook.forumReport.token);
@@ -54,10 +54,12 @@ exports.getCategorie = (req, res) => {
5454
axios.get(`http://localhost:8080/api/v1/forum/getCategorie/${req.params.categorieId}/${req.params.page}`)
5555
.then(async (responce) => {
5656
if (responce.data.status === 'success') {
57+
const status = await statusUser(req.session)
5758
res.render(path.join(__dirname, '../pages/forum/categorie.ejs'), {
58-
userConnected: await statusUser(req.session),
59+
userConnected: status,
5960
topics: responce.data.result,
60-
categorieId: req.params.categorieId
61+
categorieId: req.params.categorieId,
62+
modo: hasPermissions(status.permissions, ['MODERATOR'])
6163
})
6264
} else {
6365
res.render(path.join(__dirname, '../pages/error.ejs'), {
@@ -169,7 +171,7 @@ exports.updateMessage = (req, res) => {
169171

170172

171173
exports.deleteMessage = (req, res) => {
172-
axios.delete(`http://localhost:8080/api/v1/forum/message/${req.params.messageId}/${req.params.categorieId}/${req.session.user.id}`, {
174+
axios.delete(`http://localhost:8080/api/v1/forum/message/${req.params.messageId}/${req.session.user.id}`, {
173175
headers: { 'Authorization': `${req.session.user.id} ${req.session.user.token}` },
174176
})
175177
.then(async (responce) => {
@@ -191,7 +193,7 @@ exports.deleteMessage = (req, res) => {
191193
}
192194

193195
exports.deleteTopic = (req, res) => {
194-
axios.delete(`http://localhost:8080/api/v1/forum/topic/${req.params.topicId}/${req.session.user.id}`, {
196+
axios.delete(`http://localhost:8080/api/v1/forum/topic/${req.params.topicId}`, {
195197
headers: { 'Authorization': `${req.session.user.id} ${req.session.user.token}` }
196198
})
197199
.then(async (responce) => {

__frontend/functions.js

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,61 @@
1-
const axios = require('axios');
1+
const axios = require('axios');
22
const config = require('./config')
33
exports.statusUser = async (session) => {
44
let userConnected = {
5-
auth : false,
6-
userPermissions : -1
5+
auth: false,
6+
userPermissions: -1
77
}
88

9-
if(!session || !session.user) { //User non connecté
9+
if (!session || !session.user) { //User non connecté
1010
return userConnected = {
11-
auth : false,
12-
userPermissions : -1,
11+
auth: false,
12+
userPermissions: -1,
1313
id: -1,
14-
userAvatar : "default.png"
14+
userAvatar: "default.png"
1515
}
16-
}else{
17-
const msgs = await axios.get(`${config.urlAPI}dm/nb-msgs-new/${session.user.id}`,{ headers : { 'Authorization' : `token ${session.user.token}`}})
16+
} else {
17+
const msgs = await axios.get(`${config.urlAPI}dm/nb-msgs-new/${session.user.id}`, { headers: { 'Authorization': `token ${session.user.token}` } })
1818
return userConnected = {
19-
auth : true,
19+
auth: true,
2020
id: session.user.id,
21-
userPermissions : session.user.userPermissions,
22-
userAvatar : session.user.userAvatar,
23-
nbMsgs : msgs.data.result.nb_msgs || 0
21+
userPermissions: session.user.userPermissions,
22+
permissions: this.convertPermissions(session.user.userPermissions),
23+
userAvatar: session.user.userAvatar,
24+
nbMsgs: msgs.data.result.nb_msgs || 0
2425
}
2526
}
2627
}
28+
29+
exports.convertPermissions = (userPermsNumber) => {
30+
let userPermissions = [];
31+
const permissions = [
32+
{ value: 256, permission: 'MANAGE_ALBUM' },
33+
{ value: 128, permission: 'MANAGE_ANNOUNCEMENTS' },
34+
{ value: 64, permission: 'MANAGE_REQUESTS' },
35+
{ value: 32, permission: 'MANAGE_FORUM' },
36+
{ value: 16, permission: 'MANAGE_ARTICLES' },
37+
{ value: 8, permission: 'MANAGE_MEMBERS' },
38+
{ value: 4, permission: 'MODERATOR' },
39+
{ value: 2, permission: 'STAFF' },
40+
{ value: 1, permission: 'ADMINISTRATOR' },
41+
]
42+
for (let permission of permissions) {
43+
const rest = userPermsNumber % permission.value;
44+
if (rest == 0 && userPermsNumber != 0) {
45+
userPermissions.push(permission.permission);
46+
break;
47+
}
48+
if (rest < userPermsNumber) {
49+
userPermissions.push(permission.permission);
50+
userPermsNumber = rest
51+
}
52+
}
53+
return userPermissions;
54+
}
55+
exports.hasPermissions = (userPermissions, permissionsRequested) => {
56+
if (userPermissions[0].permission === 'ADMINISTRATOR') return true;
57+
for (permRequested of permissionsRequested) {
58+
if (!permissionsRequested.includes(permRequested)) return false;
59+
}
60+
return true;
61+
}

__frontend/middleware/admin.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
1+
const { convertPermissions } = require('../functions')
22
module.exports = async (req, res, next) => {
3-
try{
4-
if(!req.session || !req.session.user) throw 'Missing session'
5-
else if(req.session.user && req.session.user.userPermissions < 3) throw 'Missing permissions'
6-
next()
7-
}catch(err){
3+
try {
4+
const userPermissions = convertPermissions(req.session.user.userPermissions)
5+
req.user = {
6+
permissions: userPermissions
7+
}
8+
if (userPermissions.length) next()
9+
else throw 'Bad permissions'
10+
} catch (err) {
811
res.status(401).redirect('/')
9-
//json(checkAndChange(new Error('Requete non authentifiée')));
1012
}
1113
};

0 commit comments

Comments
 (0)