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

时间:2017-12-15 00:10:40

标签: feathersjs

我想使用associateCurrentUser限制对外部调用的Feathers服务方法的调用。

我还想让服务器调用此服务方法而不限制它。

用例是通过此服务然后客户端使用锁表,所有客户端都可以看到所有锁,有时服务器应清除此表中的废弃行。行放弃可能发生在网络故障等。当服务器删除数据时,应将正常的Feathers删除事件发送给客户端。

我认为这应该是associateCurrentUser和disallow hooks的混合,但我甚至无法开始尝试这个,因为我看不出它是如何组合在一起的。

请问如何实现这一点?

更新

我在Daff中找到了这个答案User's permissions in feathers.js API,这意味着如果hook的context.params.provider为null,那么调用是内部的,否则是外部的。在任何情况下,任何人都可以确认这是否真的如此吗?

从我自己的测试看来似乎是如此,但我不知道是否有任何特殊情况可能会让我陷入困境。

1 个答案:

答案 0 :(得分:4)

如果外部呼叫params.provider将设置为已使用的传输(当前为restsocketioprimus,则记录为hereherehere)。

如果在服务器上内部调用,则实际上没有任何魔法。它将是你传递给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);
}