概要
私はいくつかの複雑なデータベース構造を持っており、許可されたメンバーにのみデータを提供したいと考えています。メンバーの役割は、データベース内に格納されているデータにも依存します。今までは機能していましたが、サービスを拡大したいので、とても複雑になっています。エレガントな方法が必要です。
注:私はASP.NETを使用していないので、承認プロセスのモデル化についてのアイデアは受け入れていますが、ASP.NETに緊密に結びついている救済策を提案しないでください。
バックグラウンド
さて、私も以前にこの質問をしたことがありますが、驚いたことに、それ自体は良い反応が得られなかったので、ここでもう一度別の言葉で投稿します。私はWebアプリに取り組んでおり、承認プロセスをエレガントな方法でモデル化する方法に問題があります。
次のサービスを提供するアプリがあるとしましょう。何かを投稿したり、それらの投稿にコメントしたりできる「プロジェクト」/ワークスペースがあります。「オープン」と見なされるプロジェクトは「フォロー」することもできます。したがって、フォロワーはコンテンツにアクセスできます。この状況を私の実際のサービスに近づけるために、プロジェクトの「メンバー」はフォロワーがアクセスできるものを決定できます。これは複雑に見えるかもしれません(またはそうでないかもしれません!)が、実際のアプリはもっと複雑です。私がしたことは、SQLクエリ自体の中にフィルタリングコードを入力することでした。コードサンプルは次のとおりです。
public function getProjectById($id) {
$auth = new Auth();
$userid = $auth->getCurrentUserId();
$sql = "
SELECT P.id, P.userId, P.name, P.description,
P.creationTime, P.startTime, P.endTime, P.isOpen
FROM projects P
INNER JOIN project_members PM
ON PM.projectid = P.id
AND P.id = '{id}'
AND (PM.userId = '{userid}' OR P.isOpen = 1)
";
return $this->result($sql, array( "userid" => $userid, "id" => $id ));
}
このデータをプロジェクトフォロワーにも提供する必要があるため、これは悪いように見えます(ここには表示されていません)。そして、コメントと投稿の複雑さが増します-コードの処理。さて、これを行うためのより良い方法はありますか-あるに違いありません。承認ロジックを他のクラスに分離する必要がありますか?または/そしてデータベースで「ビュー」を使用する必要がありますか(完全に不要ですが、それでもMVCビューではないことを指摘したいと思います)?それとも、この問題を解決するためのより良い、不器用な方法はありますか?
データベース構造の変更を目的とした提案も含め、すべての提案を歓迎しますが、なぜそれが必要になるのか疑問に思います。
前もって感謝します!