データベースからサービスレイヤーへのロールベースのコンテンツ(複数のオブジェクトが1つのオブジェクトになる)を必要としています。各コンテンツへのアクセスは、ユーザーが持つ役割によって異なります。ユーザーロールに作品へのアクセス権がない場合、そのロールは空になります。これは巨大なアプリケーションではなく、ロールに基づいていくつかのコンテンツを公開するWebサービスメソッドです。データベースからロールベースのコンテンツを取得するオプション
私は3つの方法でこれを行うことができます。
1)ユーザーロールに基づいて、各コンテンツに対してデータベース呼び出しを行います。
利点 - コード内で役割が管理され、ビジネスロジック(?)がコード内にとどまるのを助けます。必要なデータのみを返します。
短所 - 複数のdb呼び出し。新しい役割が追加されると、コードを修正する必要があります。 (実際に複雑なビジネスロジックが使用されていない限り)
2) 1つのdbコールを作成し、すべてのコンテンツを別々の結果セットとして返します。セットをループし、ユーザーの役割に基づいて部分を取得します。
プロ - シングルDBコール。ロールはコード内で管理されます。
新しい役割のためにコードを修正する必要があります。余分なデータは必要ないかもしれませんが、戻されます。これらの不要なクエリは数秒を追加する可能性があります。
3) dbにロールを送信し、ロールアクセスに基づいて各ピースを取得します。
プロ - シングルDBコール。必要なものだけを返します。ストアドプロシージャだけを変更する必要があるため、新しいロールのコードを変更する必要はありません。
データベースの短所ですか?
#3>#2>#1と思われます。 (オーバーライド>がより良いことを意味します)
どのアプローチが優れているかについての洞察はありますか?
更新 - いくつかのコメントに基づいて、いくつかの詳細が以下にあります。
ユーザロールは別のシステムから取得されます。 #3はそれをdbに理想的に渡し、dbの原語では、user_role = "admin"のようにデータを返し、すべての部分を取得し、 "editor"のコンテンツ部分1,3,5を取得します。ロール管理がdb内で行われる大きなアプリケーションではありません。いくつかの企業のデータを公開するWebサービスメソッドです。
明らかに、このモデルをアプリケーション全体のロール管理に使用することはできません。しかし、このシナリオのようなメソッド・レベルのアクセス制御では、#3が最善の方法だと思います。役割はコンテンツが存在する場所以外のシステムから来るため、異なるコンテンツ部分へのアクセスを制御するロジックがどこかに存在しなければなりません。この特定のシナリオでは、データベースは、保守可能でスケーラブルで、面倒なソリューションを提供するのに適しています。恐らく、コンテンツDBにルックアップテーブルを作成して、役割とコンテンツのアクセス権を保持して、ロジックを実行するのではなく、「データ」と「ロジック」分離の感覚を与えます。
#3に対して誰も有効なケースを考えることができない場合、私はそれを進めると思います。
良い点の+1ロット。いくつかの入力を待つ。 –
私はあなたの更新にあなたに同意します。そういうアプローチだと思っていますが、他の誰かが私が考えていない他の懸念があるかどうかを見たいと思います。ここで他の答えに完全に同意しないでください。 –