ユーザーがアクセスできるすべてのリソースのリストを取得する推奨される方法は何ですか?
私が見た多くの例では、Authorization は別のサービスに配置されています。多くの場合、個々のクエリに使用できる isAuthorized() に似たメソッドを公開するものです (「ユーザーはリソース ABC を使用する権限がありますか?」)。バルク クエリ (「ユーザーは次のリソース リストのいずれかを使用する権限がありますか?」)。
認可ロジックは認可サービスに存在しますが、認可ポリシーの施行はアプリケーション自体の内部に保持されます (たとえば、認可サービスからの結果に基づいて、リソースへのアクセスを実際に実装するためのビジネス ロジック層、またはプレゼンテーションAuthorization Service からの結果に基づいて個々のオプションを表示/非表示にするレイヤーなど)。
たとえば、データ アクセス レイヤーに何十億もの "リソース" が返される可能性がある場合、どのような方法が望ましいでしょうか? 私のビジネスロジックレイヤーはそのすべてのデータを照会し(すべてをネットワーク経由で渡します)、その巨大なリストを承認サービスに転送します(再びネットワーク経由で)。「許可/拒否」の巨大なリストを取得するだけですかビジネスロジックに送り返されますか?明らかに、それは正しく聞こえません。
これは、データ アクセス、承認ロジック、およびビジネス ロジックを「明確に」分離できない場合ですか? 代わりに、データアクセス層に、ユーザーがアクセスできるすべてのリソースのリストのみを返すように依頼する必要があります。これは、単純なデータベース結合として実装される可能性がありますが、誰が誰であるかを判断するためのロジックの一部が必要になります。どの条件の下でどのリソースにアクセスできるか (つまり、承認ポリシー) がデータ アクセス コードに埋め込まれているため、これらのポリシーはコード ベース全体に分散されます (たとえば、一部の承認ロジックは Data-Access に含まれます)。レイヤー、一部は私の認証レイヤーにあるなど)?
パフォーマンスは「クリーンな」アーキテクチャに勝るかもしれませんが、これを行うためのより良い方法はありますか?