Я освобождаю доступ к страницам, используя connect-role и loopback , но у меня есть уместный вопрос о том, как я могу собрать роль клиента и с помощью connect-ролей прочитатьсеанс и ответ на маршрут.
Пример, когда клиент входит в систему, я загружаю строку, содержащую роль клиента, и получаю к ней доступ в функции, которая контролирует доступ к страницам.
У меня есть это сомнениепотому что я заканчиваю крупномасштабную службу, в которой обычно есть несколько клиентских сессий, к которым мгновенно обращаются с использованием одной и той же функции хранения и проверки.
Было бы эффективно сохранить роль клиента, используя app.set()
и app.get()
?
app.get('/session-details', function (req, res) {
var AccessToken = app.models.AccessToken;
AccessToken.findForRequest(req, {}, function (aux, accesstoken) {
// console.log(aux, accesstoken);
if (accesstoken == undefined) {
res.status(401);
res.send({
'Error': 'Unauthorized',
'Message': 'You need to be authenticated to access this endpoint'
});
} else {
var UserModel = app.models.user;
UserModel.findById(accesstoken.userId, function (err, user) {
// console.log(user);
res.status(200);
res.json(user);
// storage employee role
app.set('employeeRole', user.accessLevel);
});
}
});
});
До этого момента все происходит так, как нужно, я собираю строку, загруженную ролью клиента, и вскоре после этого создаю функцию connect-role для проверки всего этого.
var dsConfig = require('../datasources.json');
var path = require('path');
module.exports = function (app) {
var User = app.models.user;
var ConnectRoles = require('connect-roles');
const employeeFunction = 'Developer';
var user = new ConnectRoles({
failureHandler: function (req, res, action) {
// optional function to customise code that runs when
// user fails authorisation
var accept = req.headers.accept || '';
res.status(403);
if (~accept.indexOf('ejs')) {
res.send('Access Denied - You don\'t have permission to: ' + action);
} else {
res.render('access-denied', {action: action});
// here
console.log(app.get('employeeRole'));
}
}
});
user.use('authorize access private page', function (req) {
if (employeeFunction === 'Manager') {
return true;
}
});
app.get('/private/page', user.can('authorize access private page'), function (req, res) {
res.render('channel-new');
});
app.use(user.middleware());
};
Посмотрите особенно в этот момент, когда я использую console.log(app.get('employeeRole'));
, не возникнут ли у меня проблемы с одновременными подключениями?
app.get('/private/page', user.can('authorize access private page'), function (req, res) {
res.render('channel-new');
});
Например, клиент x и y подключаются одновременно и используют одну и ту же функцию для хранения данных о вашем сеансе?
Более конкретно, когда я печатаю строку в console.log(app.get('employeeRole'));
если я исправлю свои сомнения в том, что у меня нет проблем с одновременными подключениями, я загружу новую переменную var employeeFunction = app.get('employeeRole');
, поэтому да, моя функция может использовать объект, содержащий роль моего клиента, в if (employeeFunction === 'Any Role')
, если роль, загруженная в строку, содержиттребуемая роль - маршрут, по которому он освобождает страницу, в противном случае используется обратный вызов failureHandler
.
Моя тестовая среда ограничена этим типом теста, поэтому я надеюсь, что вы поможете мне с этим xD