将羽毛服务方​​法限制为外部用户,但允许对内部调用进行任何查询

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 将被设置为已使用的传输(当前为 restsocketioprimus,已记录 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);
}