Пользовательские права в feathers.js API
Я пытаюсь создать REST API с пользовательскими ролями, такими как admin, superadmin и т. Д. Я пытался добиться этого с помощью feathers-permissions
модуль, но нет ни одного рабочего примера и интернета. Вы когда-нибудь сталкивались с такой задачей? Что я делаю сейчас:feathers generate app
а потом feathers generate authentication
, Что я должен делать дальше?
1 ответ
Секрет реализации разрешений и ролей в Feathers заключается в том, что Hooks действительно предоставляют все, что вам нужно, со всей необходимой гибкостью. Нет необходимости тратить время на поиск отдельного модуля и изучение его API.
Храните разрешения (которые обычно являются просто строками) в массиве для пользователя (или отдельного permissions
сервис на основе идентификатора пользователя), а затем в before
проверка хука, разрешено ли пользователю выполнять операцию, в которой зарегистрирован хук (здесь называется разрешение messages::create
), а если нет, то выкинуть ошибку Feathers:
const { Forbidden } = require('feathers-errors');
app.service('messages').hooks({
before: {
create: [ context => {
// `params.provider` is set for any external access
// usually we don't need to check permissions for internal calls
const isExternal = !!context.params.provider;
if(isExternal && !context.params.user.permissions.includes('messages::create')) {
throw new Forbidden('You are not allowed to access this');
}
}]
}
});
Этот шаблон также может быть реализован с любым существующим модулем разрешений для узла. Для получения дополнительной информации см. Посты в блоге о Стратегиях контроля доступа в FeathersJS и Простая авторизация API с помощью CASL и Feathers.