Хуки аутентификации
$ npm install feathers-authentication-hooks --save
feathers-authentication-hooks - это пакет, который содержит некоторые полезные хуки для аутентификации и авторизации. Для дополнительной информации см главу о хуках.
Замечание: Хуки аутентификации выполняются только в том случае, когда в установлено значение
params.provider(когда доступ к методу осуществляется извне, например через REST or Socketio).
queryWithCurrentUser
queryWithCurrentUser before хук автоматически добавляет к запросу идентификатор пользователя как параметр id. Это удобно когда вы хотите возвратить данные, например "сообщения", которые были добавлены конкретно текущим пользователем.
const hooks = require('feathers-authentication-hooks');
app.service('messages').before({
find: [
hooks.queryWithCurrentUser({ idField: 'id', as: 'sentBy' })
]
});
Options
idField(default: '_id') [optional] - Название поляidдля объекта пользователя.as(default: 'userId') [optional] - Название поля в запрашиваемом ресурсе, соответствующее полюidпользователя.
Когда мы используем это хук с опциями по умолчанию, то User._id будет скопировано в hook.params.query.userId.
restrictToOwner
restrictToOwner предназначен для использования как before хук. Он позволяет пользователю получать и изменять ресурсы принадлежащие только ему самому. Если доступа нет будет возвращена ошибка доступа Forbidden. Хук может использоваться с любым методом.
Для метода find и для patch, update, remove для многих записей (с id установленным в null), будет вызван хук queryWithCurrentUser для ограничений к текущему пользователю. Для всех остальных случаев, перед продолжением будет извлекаться запись и проверятся, что она принадлежит пользователю.
const hooks = require('feathers-authentication-hooks');
app.service('messages').before({
remove: [
hooks.restrictToOwner({ idField: 'id', ownerField: 'sentBy' })
]
});
Options
idField(default: '_id') [optional] - Название поляidдля объекта пользователя.ownerField(default: 'userId') [optional] - Название поля в запрашиваемом ресурсе, соответствующее полюidпользователя.
restrictToAuthenticated
Хук restrictToAuthenticated вызывает ошибку если доступ пользователь не авторизован, проверяя объект hook.params.user. Хук может использоваться в любом методе сервиса. Он предназначен для использования в хуке before и не имеет никаких аргументов.
const hooks = require('feathers-authentication-hooks');
app.service('user').before({
get: [
hooks.restrictToAuthenticated()
]
});
Options
entity(default: 'user') [optional] - Название свойства вhook.paramsдля проверки
associateCurrentUser
before хук associateCurrentUser похож на queryWithCurrentUser, но работает для входящего параметра data, а не параметров query. Он полезен для того, чтобы автоматически добавлять id текущего пользователя к создаваемым ресурсам. Может использоваться для create, update, or patch методов.
const hooks = require('feathers-authentication-hooks');
app.service('messages').before({
create: [
hooks.associateCurrentUser({ idField: 'id', as: 'sentBy' })
]
});
Options
idField(default: '_id') [optional] - Название поляidдля объекта пользователя.as(default: 'userId') [optional] - Поле, которое будет заполнено идентификатором пользователя в создаваемом ресурсе.
restrictToRoles
Хук restrictToRoles предназначен для использования как before хук. Он разрешает пользователю получать ресурсы которыми он владеет или ресурсы принадлежащие к определенным ролям. Хук возвратит ошибку Forbidden если у пользователя нет необходимых прав. Может использоваться в методах all когда опция owner установлена в 'false'. Когда опция owner имеет значение true хук может использоваться только в get, update, patch, и remove методах сервиса.
const hooks = require('feathers-authentication-hooks');
app.service('messages').before({
remove: [
hooks.restrictToRoles({
roles: ['admin', 'super-admin'],
fieldName: 'permissions',
idField: 'id',
ownerField: 'sentBy',
owner: true
})
]
});
Options
roles(required) - Массив ролей, одной из которых должен обладать пользователь, чтобы получить доступ к ресурсу.fieldName(default: 'roles') [optional] - Поле в объекте пользователя, которое описывает роли.idField(default: '_id') [optional] - Название поляidдля объекта пользователя.ownerField(default: 'userId') [optional] - Поле, которое хранит идентификаторidпользователя владельца ресурса.owner(default: 'false') [optional] - Позволен или нет доступ владельцу ресурса независимо от его роли.
hasRoleOrRestrict
hasRoleOrRestrict предназначено для использования как before хук для любых сервисов в методах find или get. Если пользователь не имеет одной из представленных ролей, то будет добавлено ограничение на запрос, какие ресурсы возвращать.
const hooks = require('feathers-authentication-hooks');
app.service('messages').before({
find: [
hooks.hasRoleOrRestrict({
roles: ['admin', 'super-admin'],
fieldName: 'permissions',
restrict: { approved: true }
})
]
});
Options
roles(required) - Массив ролей, которыми должен обладать пользователь . Пользователь должен иметь хотя бы одну роль для доступ к ресурсу.fieldName(default: 'roles') [optional] - Поле которое описывает роли пользователя.restrict(default: undefined) - Запрос который будет объединен с запросом пришедшим от клиента, для правильного ограничения доступ к ресурсам.


