背景: 我一直在使用 C# 在 ASP.NET 4.0 中开发一个小型概念验证 Web 应用程序,并且我一直在使用 Linq To SQL,因为它既快速又简单。我现在必须限制一个用户在同一个数据库中查看另一个用户的数据。所以我在我的大多数表格中添加了一个“帐户”列,我想在允许他们访问之前检查当前用户是否与他们正在查看/编辑的数据是同一帐户的成员。
一种我不太满意的可能解决方案: 我可以简单但痛苦地检查我所有的 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
}
这将是整个应用程序中要做的大量工作,更不用说重复和出错的机会了。维护起来也很痛苦,如果我忘记为查询添加这个,我会留下一个安全漏洞。
问题: 有没有办法为每个表执行一次,每次我使用 Linq To SQL 进行查询时它都会自动检查?或者有没有更好的方法来解决这个问题?