我想使用associateCurrentUser限制对外部调用的Feathers服务方法的调用。
我还想让服务器调用此服务方法而不限制它。
用例是通过此服务然后客户端使用锁表,所有客户端都可以看到所有锁,有时服务器应清除此表中的废弃行。行放弃可能发生在网络故障等。当服务器删除数据时,应将正常的Feathers删除事件发送给客户端。
我认为这应该是associateCurrentUser和disallow hooks的混合,但我甚至无法开始尝试这个,因为我看不出它是如何组合在一起的。
请问如何实现这一点?
更新
我在Daff中找到了这个答案User's permissions in feathers.js API,这意味着如果hook的context.params.provider为null,那么调用是内部的,否则是外部的。在任何情况下,任何人都可以确认这是否真的如此吗?
从我自己的测试看来似乎是如此,但我不知道是否有任何特殊情况可能会让我陷入困境。
答案 0 :(得分:4)
如果外部呼叫params.provider
将设置为已使用的传输(当前为rest
,socketio
或primus
,则记录为here ,here和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);
}