私はループバックで3つのモデルを持っているとしましょう:リーダー、ブック、ノート。 。Readerは、ユーザーのインスタンスであるとのかかわりにログインすることができますすることは、そのようなものです:ループバックのアクセス制御はフィルタを含む
- Readerは、多くの本を持っている
- Readerは、多くのノートを持ってい
- ブックは
- 注リーダー
- に属し、多くのノートを持っていますノート
私が達成しようとしているのは、ログインしたリーダーのすべての書籍に、書籍とリーダー。
APIコールは、次のようになります。
/api/reader/me/books?filter[include]=notes
しかし、彼らはリーダーに属している場合、これは関係なく、ブックに属するすべての内容を返します。私は別のフィルタをAPIコールに追加することができますが、リーダが他の読者のメモにアクセスできないように、サーバ側のノートをフィルタリングする必要があります。
私はブックモデルにこのアクセスコントロールを追加しようとしました:
{
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW",
"property": "__get__notes"
}
とモデル
[
{
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
}, {
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW",
"property": "*"
}
]
を注意するために、このACLそれはこの
/api/reader/me/books/<bookId>/notes
などの呼び出しに適しています
が含まれていますが、最初の呼び出しではincludeフィルタは使用されません。書籍に読者のメモを埋め込むためにはどうすればよいですか?
ご迷惑をおかけして申し訳ございません。
SLで使用されているモデルごとのベースではなく、インスタンス単位でアクセスを制限または許可する必要がある同様の問題がありました。残念ながら、これを行う適切な方法が見つからず、自分の認証レイヤーを実装する必要がありました。しかし、あなたができることの1つは、afterRemoteフックの単純なフィルタリングです。そうすれば、あなたはアクセス可能なインスタンスだけを返すように何らかの種類の減算を行うことができます。私の場合、これは不可能でした。なぜなら、ユーザーAのインスタンスにユーザーBがアクセスできる必要があったからです。これはあなたのケースではないので、うまくいく可能性があります。 – Acapulco
ここでドキュメントを読むことができます - https://loopback.io/doc/en/lb2/Remote-hooks.html - それはまっすぐではなく、あまり効率的ではありません – Acapulco