У меня есть приложение, использующее Angular 5 для внешнего интерфейса, NodeJS для внутреннего интерфейса, и я использую петлю для создания API. У меня есть удаленный метод, который я использую для входа пользователя, это работает. Теперь я хотел изменить этот метод, чтобы также проверить, является ли пользователь администратором, однако я не могу этого сделать. По какой-то причине, когда я делаю вызов API к модели RoleMappings, используя /api/RoleMappings?filter={where: {"principalId": ID_VALUE}, это не работает. ID_VALUE также является user_id администратора, поскольку эта роль и администратор создаются программно, поэтому я знаю, что должен быть PrincipalId — это userId.
Я делаю запрос на проверку роли как вложенный запрос, сначала я проверяю, вошел ли пользователь в систему (если пользователь даже не входит в систему, нет смысла проверять, является ли он администратором), затем я проверяю, если что пользователь оказывается админом. Это код, любая помощь будет оценена по достоинству.
Я протестировал вызов API с помощью IBM API connect, и он сработал, просто он не хочет работать из моего кода. Этот запрос не выдает ошибку, но ответ содержит код 400, а тело пусто.
БД, в которой хранятся сопоставления ролей, — это CloudantDB.
var options = {
method: 'POST',
url: conf.endpoint + 'api/Clients/login',
headers: this.headers,
body: user,
json: true
}
request(options, function (error, response, body) {
if (error) return callback(error);
//
var adminOptions = {
method: 'GET',
url: conf.endpoint + '/api/RoleMappings',
qs: {filter: {"where":{"principalId": "\""+body.userId"\"","roleId":"159882e4a5bdde9cc725eee8c13a1030"}}},
headers: this.headers
}
request(adminOptions, function(aReqErr, aRes, aBody){
if(aReqErr) return callback(aReqErr);
//console.log("Admin check success: ", aRes);
if(aBody){
var pId = aBody[0].principalId;
console.log("Admin check success:", aBody);
if(pId){
body["isAdmin"] = true;
}else{
body["isAdmin"] = false;
}
}else{
console.log("aResCode", aRes.statusCode);
console.log("aResMessage", aRes.statusMessage);
//console.log("aReqErr", aReqErr);
}
});
//console.log('Success: ', typeof body);
callback(null, body);
});