Я использую Loopback3. Я сталкиваюсь с проблемой с моими роли ACL, и я не уверен, что я сделал не так. Я хочу, чтобы пользователи из определенных ролей могли записывать данные в конечную точку, и по какой-то причине пользователь, которого я создал (который находится в одной из этих ролей), не может писать. Я получаю ошибку авторизации.Loopback ACL «Требуется авторизация»
У меня есть 4 роли:
- администратора
- внутренний
- внешний
- бот
Для этой конечной точки, все прошедшие проверку пользователи могут читать данные, но только администратора, внутренние и бот пользователи могут записывать данные, и только пользователи-администраторы могут удалять данные.
Вот как я получил мои списки ACL определены:
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "internal",
"permission": "ALLOW"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "bot",
"permission": "ALLOW"
},
{
"accessType": "DELETE",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW"
}
],
У меня есть два пользователя установить, один бот и один является администратором. Когда я выполняю запрос POST для API для любого пользователя, я получаю ошибку «Требуется авторизация», даже когда это делается из интерфейса проводника. Я могу сделать GET без проблем, но POST получает сбой.
Если я удалю все «ПИСАТЬ» acl и замените их на это, выполните POST.
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
},
Итак, я может, чтобы это произошло, но я не знаю, почему мои пользовательские роли не удается.
Редактировать: Вот как я создал пользователей, так как на самом деле у меня нет никакого интерфейса.
module.exports = function (app) {
let today = new Date();
let admin = {
name: 'admin',
description: 'admin users',
created: today.toJSON(),
modified: today.toJSON()
};
let internal = {
name: 'internal',
description: 'Internal users',
created: today.toJSON(),
modified: today.toJSON()
};
let external = {
name: 'external',
description: 'external users',
created: today.toJSON(),
modified: today.toJSON()
};
let bot = {
name: 'bot',
description: 'robots',
created: today.toJSON(),
modified: today.toJSON()
};
let model = app.models.user;
model.create([
{username: 'bot', email: '[email protected]', password: 'test123'},
{username: 'admin', email: '[email protected]', password: 'test123'},
{username: 'iAdmin', email: '[email protected]', password: 'test123'},
{username: 'eUser', email: '[email protected]', password: 'test123'},
], function(err, users) {
if (err) throw err;
app.models.Role.create(bot, function (err, botRole) {
if (err) throw err;
botRole.principals.create({principalType: app.models.RoleMapping.user, principalID: users[0].id}, function(err, principal) {
if (err) throw err;
});
});
app.models.Role.create(admin, function (err, adminRole) {
if (err) throw err;
adminRole.principals.create({principalType: app.models.RoleMapping.user, PrincipalID: users[1].id}, function(err, principal) {
if (err) throw err;
});
});
app.models.Role.create(admin, function (err, internalRole) {
if (err) throw err;
internalRole.principals.create({principalType: app.models.RoleMapping.user, PrincipalID: users[2].id}, function(err, principal) {
if (err) throw err;
});
});
app.models.Role.create(external, function (err, externalRole) {
if (err) throw err;
externalRole.principals.create({principalType: app.models.RoleMapping.user, PrincipalID: users[3].id}, function(err, principal) {
if (err) throw err;
});
});
});
};
Возможно, проблема заключается в том, где вы создали роли и связали их с пользователем. –
Возможно, я добавил сценарий, который я использовал для создания пользователей в первую очередь. – Lisa
Я считаю, что они должны быть 'app.models.RoleMapping.USER' вместо' app.models.RoleMapping.user' –