2

私の会社で将来使用するための適切な候補を決定するために、現在多数のフレームワークをテストしていますが、LoopBack は私のニーズにほぼ完璧であるという点で私の注目を集めました。

ただし、場合によっては、ACL モデルがかなり制限されているように感じます。次の使用例を見てみましょう: 共同旅行管理 Web サイトで、ユーザーは公開旅行を作成および/または参加できます。次の API があるとします。

  • /Travelsユーザーが持っているすべての旅行を一覧表示します
  • /Travels/publicすべての公的な旅行をリストします
  • /Travels/{id}/join指定された ID で Travel に参加する

そのような API を構築するには、車輪を再発明する必要がありますか? それとも実装するミドルウェアですか?

同じことがフィールドごとの ACL にも当てはまります。いくつかのチェックリスト項目があり、手動で追加されたものと自動生成されたものがあるとします。「完了」フィールドの変更を除いて、自動操作でのみ書き込み操作をブロックできますか?

4

2 に答える 2

6

デフォルトでは、

GET /Travels

Travel モデルのすべての要素をリストします。適切な関係 (おそらくユーザーと旅行の間の多対多の関係) を設定した場合、特定のユーザー旅行を照会する適切な方法は次のとおりです。

GET /Users/{id}/Travels

Travels.find()ただし、フックやスコープを使用したり、メソッド プロトタイプをオーバーロードしたりするデフォルトの動作をカスタマイズできます。

それは些細なことですが、リモートメソッド/Travels/publicを作成するだけです。プロパティを使用して、エンドポイントをカスタマイズします。path

最後に、へのリクエストによる旅行への参加/Travels/{id}/joinもリモート メソッドで管理されますが、これは POST リクエストである必要があります。

ループバックは、関係テーブルを指定せずに多対多の関係を管理できますが、あなたの場合はむしろそれを定義したいと思います。例えば

{
"name": "UserTravel",
  "options": { ... },
  "properties": {
    "id":{"type":"Number", "id":1},
    "userId":{"type":"Number"},
    "travelId":{"type":"Number"}
  },
  "relations": {
    "Travel": {
        "type": "belongsTo",
        "model": "Travel",
        "foreignKey": "travelId"
    },
    "User": {
        "type": "belongsTo",
        "model": "User",
        "foreignKey": "userId"
    }
  }
}

joinこのモデルが手元にあれば、エンドポイントを呼び出すときに特定のユーザー/旅行タプルを挿入できます。リクエスト パラメータから travelId を取得し、リクエスト accessToken から userId を取得します。これにより、ユーザーはアプリで認証されます。

于 2014-11-13T16:14:55.383 に答える
2

@amenadielが示唆したように、フックを使用して、ログインしたユーザーがデフォルトのフィルターを設定できます。

MyModel.observe('access', function limitToTenant(ctx, next) {
  ctx.query.where.tenantId = loopback.getCurrentContext().tenantId;
  next();
});

docs からこれを取得しました。

于 2015-12-20T04:06:42.480 に答える