From 69695d818e7189723b0be539b908d6492aa564c0 Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Sat, 21 Mar 2015 14:35:33 +0100 Subject: [PATCH] Serveur: Vérification des permissions de modifications de membres --- app/controllers/sessions.js | 20 ++++++++++++++++++-- app/routes/api.js | 52 +++++++++++++++++++++++++++++++++++----------------- public/js/controllers/MembreCtrl.js | 12 ++++++------ public/js/controllers/SessionCtrl.js | 11 +++++++---- public/js/services/SessionServ.js | 18 ++++++------------ public/views/index.html | 4 ++-- public/views/membres.html | 6 +++--- 7 files changed, 77 insertions(+), 46 deletions(-) diff --git a/app/controllers/sessions.js b/app/controllers/sessions.js index 656722c..9be7d5a 100644 --- a/app/controllers/sessions.js +++ b/app/controllers/sessions.js @@ -3,6 +3,8 @@ var noms = require('../controllers/noms'); var sessions = {} +sessions.cur = false + sessions.addData = function (session, cb) { noms.get(session.login, function (nom) { if (typeof nom == 'string') { @@ -10,6 +12,8 @@ sessions.addData = function (session, cb) { } else { session.nom = 'Inconnu' } + session.canAddMembre = session.login == 'gbontoux' + session.canDelMembre = session.login == 'gbontoux' cb(session) }) } @@ -45,7 +49,7 @@ sessions.verify = function (id, cb) { } else { if (session) { if (sessions.valid(session)) { - cb(err, session); + cb(null, session); } else { cb('expired'); _this.delete(id) @@ -57,6 +61,18 @@ sessions.verify = function (id, cb) { }); } +sessions.use = function (id, cb) { + _this = this + _this.verify(id, function (err, session) { + if (err) { + cb(err) + } else { + _this.cur = session + cb(null) + } + }) +} + sessions.create = function (login, cb) { Session.create({ login: login @@ -89,7 +105,7 @@ sessions.open = function (data, cb) { if (err) { cb('error'); } else { - _this.find(session._id, cb) + _this.use(session._id, cb) } }); } else { diff --git a/app/routes/api.js b/app/routes/api.js index 4dd4176..0502a7a 100644 --- a/app/routes/api.js +++ b/app/routes/api.js @@ -7,11 +7,11 @@ var api = express() // Sessions api.get('/session', function (req, res) { // Informations sur la session if (req.cookies && req.cookies.session) { - sessions.verify(req.cookies.session, function (err, session) { + sessions.use(req.cookies.session, function (err) { if (err) { res.send(err) } else { - res.send(session) + res.send(sessions.cur) } }) // TODO si pas bon : res.clearCookie('session') @@ -21,12 +21,12 @@ api.get('/session', function (req, res) { // Informations sur la session }); api.post('/session', function (req, res) { // Se connecter - sessions.open(req.body, function (err, session) { + sessions.open(req.body, function (err) { if (err) { res.send(err) } else { - res.cookie('session', session._id); - res.send(session) + res.cookie('session', sessions.cur._id); + res.send(sessions.cur) } }) }) @@ -42,6 +42,20 @@ api.delete('/session', function (req, res) { // Se déconnecter } }) +ifPermission = function (req, res, perm, cb) { + sessions.use(req.cookies.session, function (err) { + if (err) { + res.status(403).end() + } else { + if (sessions.cur[perm]) { + cb() + } else { + res.status(403).end() + } + } + }) +} + // Membres api.get('/membres', function (req, res) { // Liste des membres @@ -53,27 +67,31 @@ api.get('/membres', function (req, res) { // Liste des membres }); api.post('/membres', function (req, res) { // Ajout d'un membre - membres.add(req.body, function (err, membre) { - if (err) - res.send(err); - membres.list(function (err, membres) { + ifPermission(req, res, 'canAddMembre', function () { + membres.add(req.body, function (err, membre) { if (err) res.send(err); - res.json(membres); + membres.list(function (err, membres) { + if (err) + res.send(err); + res.json(membres); + }); }); - }); + }) }); api.delete('/membres/:membre_id', function (req, res) { // Supression d'un membre - membres.remove(req.params.membre_id, function (err, membre) { - if (err) - res.send(err); - membres.list(function (err, membres) { + ifPermission(req, res, 'canDelMembre', function () { + membres.remove(req.params.membre_id, function (err, membre) { if (err) res.send(err); - res.json(membres); + membres.list(function (err, membres) { + if (err) + res.send(err); + res.json(membres); + }); }); - }); + }) }) module.exports = api; \ No newline at end of file diff --git a/public/js/controllers/MembreCtrl.js b/public/js/controllers/MembreCtrl.js index d59f927..4386f84 100644 --- a/public/js/controllers/MembreCtrl.js +++ b/public/js/controllers/MembreCtrl.js @@ -1,10 +1,12 @@ angular.module('MembreCtrl', []).controller('MembreController', ['$scope', '$http', 'SessionService', function ($scope, $http, SessionService) { $scope.formData = {}; - $scope.canAdd = SessionService.logged - $scope.canDel = SessionService.logged - // when landing on the page, get all Membres and show them + $scope.session = SessionService.cur + SessionService.onChange(function () { + $scope.session = SessionService.cur + }) + $http.get('/api/membres') .success(function (data) { $scope.membres = data; @@ -14,12 +16,11 @@ angular.module('MembreCtrl', []).controller('MembreController', ['$scope', '$htt console.log('Error: ' + data); }); - // when submitting the add form, send the text to the node API $scope.createMembre = function () { console.log('Adding', $scope.formData); $http.post('/api/membres', $scope.formData) .success(function (data) { - $scope.formData = {}; // clear the form so our user is ready to enter another + $scope.formData = {}; $scope.membres = data; }) .error(function (data) { @@ -27,7 +28,6 @@ angular.module('MembreCtrl', []).controller('MembreController', ['$scope', '$htt }); }; - // delete a Membre after checking it $scope.deleteMembre = function (id) { $http.delete('/api/membres/' + id) .success(function (data) { diff --git a/public/js/controllers/SessionCtrl.js b/public/js/controllers/SessionCtrl.js index 7885ee7..23382b8 100644 --- a/public/js/controllers/SessionCtrl.js +++ b/public/js/controllers/SessionCtrl.js @@ -1,9 +1,12 @@ angular.module('SessionsCtrl', []).controller('SessionController', ['$scope', 'SessionService', function ($scope, SessionService) { - $scope.session = SessionService - // $scope.session.onChange(function () { - // // TODO - // }) + $scope.session = SessionService.cur + $scope.disconnect = function () { + SessionService.disconnect() + } + SessionService.onChange(function () { + $scope.session = SessionService.cur + }) // $scope.$on("$destroy", function () { // // TODO // }) diff --git a/public/js/services/SessionServ.js b/public/js/services/SessionServ.js index d4deaa5..48eba9b 100644 --- a/public/js/services/SessionServ.js +++ b/public/js/services/SessionServ.js @@ -1,8 +1,7 @@ angular.module('SessionsServ', []).service('SessionService', ['$http', function ($http) { a = { - nom: "Invité", - logged: false, + cur: false, status: 0, changeHandlers: [], onChange: function (fun) { @@ -14,18 +13,15 @@ angular.module('SessionsServ', []).service('SessionService', ['$http', } }, updateSessionInfos: function (data) { + console.log("Connection:", data) if (typeof data === 'object') { - console.log("Connected") - this.logged = true - this.nom = data.nom + this.cur = data } else { - - this.logged = false + this.cur = false } this.triggerChange() }, get: function (cb) { // Fetch infos if needed - console.log("Session: get") if (status == 0) { this.status = 1 // Fetching _this = this @@ -41,11 +37,10 @@ angular.module('SessionsServ', []).service('SessionService', ['$http', } }) } else { - console.warn("get multiple times") + console.warn("Unnecessary get() call") } }, connect: function (login, pass, cb) { - console.log("Session: connecting with login:", login) _this = this $http.post('/api/session', { login: login, @@ -62,9 +57,8 @@ angular.module('SessionsServ', []).service('SessionService', ['$http', }) }, disconnect: function () { - console.log("Session: disconnect", this.name) + this.updateSessionInfos(false) $http.delete('/api/session') - this.logged = false } } a.get() diff --git a/public/views/index.html b/public/views/index.html index ae7be6f..17a4a73 100644 --- a/public/views/index.html +++ b/public/views/index.html @@ -31,8 +31,8 @@ diff --git a/public/views/membres.html b/public/views/membres.html index 2ca9fc4..bbccbc3 100644 --- a/public/views/membres.html +++ b/public/views/membres.html @@ -10,7 +10,7 @@ Nom Section Rôle - Action + Action @@ -18,13 +18,13 @@ {{ membre.login }} {{ membre.section }} {{ membre.role }} - - + -- libgit2 0.21.2