2017-12-15 3 views
0

associateCurrentUserを使用して外部呼び出しの呼び出しをFeathersサービスメソッドに制限します。外部に対してfeathersサービスメソッドをユーザーに限定しますが、内部呼び出しには任意の照会を許可します

また、サーバーがこのサービスメソッドを制限せずに呼び出せるようにします。

このサービスを使用すると、クライアントはロックテーブルを使用し、すべてのクライアントはすべてのロックを見ることができます。また、サーバはこのテーブルの中止された行をクリアする必要があります。行の破棄はネットワーク障害などで発生する可能性があります。サーバーがデータを削除すると、通常のフェザー削除イベントがクライアントに放出されます。

これはassociateCurrentUserとdisallow hookの組み合わせでなければならないと思いますが、どのように組み合わされるのかわからないので、これを実験することさえできません。

これはどのように実装しますか?

更新:

私はフックのcontext.params.providerがnullの場合、呼び出しはそうでない場合は、外部、内部であることを意味DAFFからこの答えUser's permissions in feathers.js APIを見つけました。これは本当にすべての場合にそうであれば誰でも確認できますか?

私自身のテストではそうだと思われますが、そこに特別なケースがあるかどうかは分かりません。

答えて

1

呼び出しが外部にある場合params.providerが使用されたトランスポートに設定される(現在restsocketioまたはprimusのいずれかが、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); 
} 
+0

ありがとうございました!私は、associateCurrentUser + disallowフックの代わりにparams.providerを使用しなければなりませんでした。再び非常にエレガントな、いつものように羽毛。 – Matty

+0

ええ、あらかじめ構築されたフックの多くは、特に古い認証フックは、既存のものがどのように動作するか(あるいは必要なものを行うか)よりはるかに簡単にコードのいくつかの行に実装する方が簡単です。 – Daff

関連する問題