Ответ 1
Недавно я работал над проектом ACL для hapijs. Это должно стать хорошим началом. https://www.npmjs.org/package/hapi-authorization
Глядя на использование HapiJS в качестве нашего сервера API. Нам нужны мелкие разрешения пользователя, например. "Пользователь A может редактировать поле B" "Пользователь C может просматривать поле D" для данной модели/ресурса.
Прежде чем мы начнем создавать что-то, я искал, если что-то подобное уже сделано, что совместимо с Hapi.
Недавно я работал над проектом ACL для hapijs. Это должно стать хорошим началом. https://www.npmjs.org/package/hapi-authorization
Я только что прочитал статью, в которой разрешения ACL проверяются с использованием встроенных областей.
Вот ссылка на указанную статью: https://blog.andyet.com/2015/06/16/harnessing-hapi-scopes/
И чтобы быстро возобновиться (используя пример из приведенной выше ссылки), вы получаете объект пользователя, который выглядит так:
{
"username": "han",
"scope": ["door-trash-compactor"]
}
Сфера может быть сгенерирована независимо от того, что поддерживает ваш ACL для этого пользователя. В этом случае у вас есть ресурс door
с id trash-compactor
, который можно проверить следующим образом:
server.route({
method: 'GET',
route: '/doors/{door_id}',
config: {
handler: function (request, reply) {
reply(request.params.door_id ' door is closed');
},
auth: {
scope: ['door-{params.door_id}']
}
}
});
Область door-{params.door_id}
будет переведена на door-trash-compactor
, которая затем будет проверена. Запрос Хана на дверь уплотнителя мусора будет действительным, и он получит сообщение door is closed
.
Сообщение в блоге хорошо написано (гораздо лучше, чем это резюме) и описывает это более подробно - рекомендовал бы прочитать.