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