当他更新实体框架中的行时,如何检查用户是否是实体的所有者?

时间:2011-05-25 17:15:16

标签: c# asp.net-mvc database security entity-framework

我有问题...我写了一个网站,现在我必须保护我的页面。所以问题是......当用户编辑实体时,我应该检查他是否是这个实体的所有者。 Traditionaly(没有实体框架)我通过在sql查询中包含where子句来实现它。例如:

update posts set
 title = "Great Post"
where 
 post_id = 5 and
 owner_id = " + CurrentLogedinUser.Id + "

但我不知道我怎么能在实体框架中做到这一点。

有人可以告诉我吗?

2 个答案:

答案 0 :(得分:3)

在EF中,您通常会将项目加载到上下文之外,更改它并将其重新放入。所以您可以检查这样的值:

var post = context.Posts.Single(p => p.PostId == 5);
if(post.OwnerId != CurrentLoggedInUser.Id) throw new Exception("Stop hacking!");
post.title = "Great Post";
context.SaveChanges();

答案 1 :(得分:0)

如果owner_idPost实体的属性,那么您不能在提交更新之前检查(甚至在允许他们编辑之前) ?