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

问题描述 投票:0回答:1

我想限制对具有关联CurrentUser的外部调用的Feathers服务方法的调用。

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

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

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

请问如何实现这一点?

更新:

我从Daff找到了这个答案User's permissions in feathers.js API,这意味着如果hook的context.params.provider为null,那么调用是内部的,否则是外部的。谁能确认在所有情况下是否真的如此,拜托?

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

feathersjs
1个回答
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.