背景: 私は ASP.NET 4.0 で C# を使用して小さな概念実証 Web アプリケーションに取り組んでおり、Linq To SQL を使用しているのは、迅速かつ簡単だからです。あるユーザーが同じデータベース内の別のユーザーのデータを参照できないように制限する必要があります。そのため、ほとんどのテーブルに「アカウント」列を追加しました。アクセスを許可する前に、現在のユーザーが表示/編集しているデータと同じアカウントのメンバーであることを確認したいと思います。
私があまり満足していない考えられる解決策の 1 つ は、Linq To SQL クエリをすべて調べて、if ステートメントを追加して次のようにチェックすることです。
MyDataContext DB = new MyDataContext();
//get the current user's information from the DB
USER myUser = DB.USERs.Where(j => j.USR_EMAIL == User.Identity.Name).FirstOrDefault();
//get the object to edit
MYOBJECT myObject= DB.MYOBJECTs.Where(j => j.ID == IdFromQueryString).FirstOrDefault();
//compare the user's account with the object's account they are now trying to view
if(myUser.AccountID == myObject.AccountID)
{
//display the object
}
else
{
//display error message
}
これは、アプリケーション全体で多くの作業を行う必要があり、繰り返しや間違いの可能性は言うまでもありません。また、維持するのも面倒です。これをクエリに追加するのを忘れると、セキュリティ ホールが開いたままになります。
質問: これをテーブルごとに 1 回行う方法はありますか? Linq To SQL でクエリを実行するたびに自動的にチェックされますか? またはこれについてもっと良い方法はありますか?