确保登录用户只能查看其数据的最佳方法

Mar*_*ark 5 asp.net security asp.net-mvc asp.net-mvc-3

这听起来像是一个愚蠢的问题,但我只是想知道我是否在任何地方错过了一个技巧.

场景是,我有一个使用Simple Memebership的Web应用程序,用户可以注册使用它(例如发票程序).

但是,他们应该只能查看/更新/删除他们自己添加到数据库/ Web应用程序的信息.

确保用户只能访问其信息的最佳方法是什么?

是为每个表添加一个用户名字段,例如:

public class Invoice
{
     public int InvoiceId { get; set; }
     public int CustId { get; set; }
     public string UserName { get; set; }
}

public class Item
{
   public int ItemId { get; set; }
   public int InvoiceId { get; set; }
   public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

...然后在访问数据的任何控制器中,只需在每个查询中添加用户名检查,例如:

var Inv = db.Invoices.Where(x => x.UserName = User.Identity.Name);
var Itm = db.Items.Where(y => y.UserName = User.Identity.Name);
Run Code Online (Sandbox Code Playgroud)

这就是我目前正在使用的,但想知道这是否是最佳做法?或者,如果有一种更简单的方法,我们现在进入MVC4?

最好是从UserProfile表中使用UserNameUserId,还是重要?

更新以在评论后添加清晰度

所以有10个用户注册了 - 并且都创建了自己的发票.我不希望任何用户看到任何其他用户发票.

谢谢你的建议.

标记

Cap*_*chi 2

如果正确设置数据库关系,您应该能够引用用户的发票,如下所示:

var invoices = dbContext.Users.first(u=>u.id == idParam).Invoices;
Run Code Online (Sandbox Code Playgroud)

您可以通过测试来验证发票是否属于用户

if(dbContext.Invoices.Any(i=>i.invoiceID))//invoice exists?
{
    //Invoice belongs to user?
    bool invoiceBelongsToUser = dbContext.Users.first(u=>u.id == idParam)
    .Invoices.Any(i=>i.invoiceID == invoiceIDParam);
}
Run Code Online (Sandbox Code Playgroud)