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表中使用UserName或UserId,还是重要?
更新以在评论后添加清晰度
所以有10个用户注册了 - 并且都创建了自己的发票.我不希望任何用户看到任何其他用户发票.
谢谢你的建议.
标记
如果正确设置数据库关系,您应该能够引用用户的发票,如下所示:
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)
| 归档时间: |
|
| 查看次数: |
905 次 |
| 最近记录: |