将羽毛服务方法限制为外部用户,但允许对内部调用进行任何查询
Restrict feathers service method to user for external but allow any queries for internal calls
我想通过 associateCurrentUser 限制对 Feathers 服务方法的调用。
我也想允许服务器不加限制地调用这个服务方法
用例是通过此服务然后客户端使用锁 table,所有客户端都可以看到所有锁,偶尔服务器应清除此 table 中的废弃行。行放弃可能发生在网络故障等情况下。当服务器删除数据时,应向客户端发送正常的 Feathers 删除事件。
我想这应该是 associateCurrentUser 和 disallow 钩子的混合体,但我什至不能开始试验它,因为我不知道如何将它们组合在一起。
请问如何实现这一点?
更新:
我从 Daff 找到了这个答案 ,这意味着如果挂钩的 context.params.provider 为空,则调用是内部的,否则是外部的。任何人都可以确认是否在所有情况下都是如此吗?
从我自己的测试来看似乎是这样,但我不知道是否有任何特殊情况可能会影响我。
如果调用是外部的 params.provider
将被设置为已使用的传输(当前为 rest
、socketio
或 primus
,已记录 here, here and here).
如果在服务器内部调用,实际上并没有什么神奇之处。它将是您作为 params
传递的任何内容。如果您什么都不传递,它将是 undefined
如果您在钩子中传递(或合并)hook.params
,它将与调用原始方法的方法相同。
// `params` is an empty object so `params.provider` will be `undefined`
app.service('messages').find({})
// `params.provider` will be `server`
app.service('messages').find({ provider: 'server' })
// `params.provider` will be whatever the original hook was called with
function(hook) {
hook.app.service('otherservice').find(hook.params);
}
我想通过 associateCurrentUser 限制对 Feathers 服务方法的调用。
我也想允许服务器不加限制地调用这个服务方法
用例是通过此服务然后客户端使用锁 table,所有客户端都可以看到所有锁,偶尔服务器应清除此 table 中的废弃行。行放弃可能发生在网络故障等情况下。当服务器删除数据时,应向客户端发送正常的 Feathers 删除事件。
我想这应该是 associateCurrentUser 和 disallow 钩子的混合体,但我什至不能开始试验它,因为我不知道如何将它们组合在一起。
请问如何实现这一点?
更新:
我从 Daff 找到了这个答案
从我自己的测试来看似乎是这样,但我不知道是否有任何特殊情况可能会影响我。
如果调用是外部的 params.provider
将被设置为已使用的传输(当前为 rest
、socketio
或 primus
,已记录 here, here and here).
如果在服务器内部调用,实际上并没有什么神奇之处。它将是您作为 params
传递的任何内容。如果您什么都不传递,它将是 undefined
如果您在钩子中传递(或合并)hook.params
,它将与调用原始方法的方法相同。
// `params` is an empty object so `params.provider` will be `undefined`
app.service('messages').find({})
// `params.provider` will be `server`
app.service('messages').find({ provider: 'server' })
// `params.provider` will be whatever the original hook was called with
function(hook) {
hook.app.service('otherservice').find(hook.params);
}