2017-05-20 6 views
3

フェザーでは、特定のサービスでアクセス可能なデータを、現在ログインしているユーザーが所有するデータに制限することを目標としています。フェザー - 現在のユーザーのみが所有するデータに対するサービス応答を制限する

私がFeathers認証を使用していると仮定すると、このサービスで利用可能なデータはデータベーステーブルに格納され、ユーザーIDを含むテーブル列はuser_idと呼ばれます。

変更しない場合はどうすればよいですか?

質問に答えることが重要な場合は、SequelizeとPostgresを使用しています。

const { authenticate } = require('feathers-authentication').hooks; 

const { queryWithCurrentUser } = require('feathers-authentication-hooks'); 
const { associateCurrentUser } = require('feathers-authentication-hooks'); 

const readRestrict = [ 
    queryWithCurrentUser({ 
    idField: 'id', 
    as: 'user_id' 
    }) 
]; 

const modRestrict = [ 
    associateCurrentUser({ 
    idField: 'id', 
    as: 'user_id' 
    }) 
]; 

module.exports = { 
    before: { 
    all: [ authenticate('jwt') ], 
    find: [ ...readRestrict ], 
    get: [ ...readRestrict ], 
    create: [ ...modRestrict ], 
    update: [ ...modRestrict ], 
    patch: [ ...modRestrict ], 
    remove: [ ...modRestrict ] 
    }, 

    after: { 
    all: [], 
    find: [], 
    get: [], 
    create: [], 
    update: [], 
    patch: [], 
    remove: [] 
    }, 

    error: { 
    all: [], 
    find: [], 
    get: [], 
    create: [], 
    update: [], 
    patch: [], 
    remove: [] 
    } 
}; 

動作するようですが、私は羽がnoobのだので、私はこれは私がそれに気づかないよ何も例がないことを確認するために野生に入れられる前に、私はより良いチェックをしようと思いました漏れの原因となります。

+1

いいですね。期待どおりに動作しないと思われる理由は何ですか? – Daff

+0

ありがとう!それは、私がFeathers(とJS)の新人で、野生にリリースする前に再確認したいということです。フェザーのシーンの裏にはたくさんのことがあるので、私が何か重要なものを見逃していたかどうかは分かりませんでした。フレームワークはあなたのためにとても役に立ちますので、あまりにも簡単です。私が忘れてしまったものがなければなりません。 :)素晴らしいフレームワークをありがとうございました! – Matty

+1

websocket接続を許可する場合は、適切な*フィルタ*をサービスに追加する必要があります。デフォルトでは、フックに関係なく、すべてのイベントがすべてのクライアントにプッシュされます。つまり、ユーザーがサービスに新しいレコードを作成すると、接続されているすべてのクライアントがそのレコードを受信します。 – jsphpl

答えて

0

羽毛の初心者で表現すると、わかりません。さて、上記のようにすべての作品。 removeについては

旧回答

、私はrestrictToOwnerを使用。 (私はpatchupdateと思っていますが、それは既存のデータで動作するためですが、私はそれをテストしませんでした) それ以外の場合は、IDを指定してデータをクロス削除できました。これがあなたの場合であるかどうかを確認することもできます。

これはテストケースである:

  1. ユーザ1は、物体
  2. ユーザ2を特定するための認可
  3. オブジェクトIDを確認する
    • ユーザIDとモデルオブジェクトを作成オブジェクトIDを持つオブジェクトを削除します
      • 試験OK:404予想
      • テストが失敗:204または200は、オブジェクトを取得する
    • ユーザ1回の試行を働い
      • 試験OK:オブジェクト200
      • テストは失敗し、ある物体、存在しない404

テストコード:

ありがとうございました、あなたのポストは、私にとって本当に便利でした!

関連する問題