Хуки аутентификации
$ 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) - Запрос который будет объединен с запросом пришедшим от клиента, для правильного ограничения доступ к ресурсам.