Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当用户更新实体框架中的行时,如何检查他是否是实体的所有者?_C#_Asp.net Mvc_Database_Security_Entity Framework - Fatal编程技术网

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

C# 当用户更新实体框架中的行时,如何检查他是否是实体的所有者?,c#,asp.net-mvc,database,security,entity-framework,C#,Asp.net Mvc,Database,Security,Entity Framework,我有问题。。。我写了一个网站,现在我必须保护我的网页。所以问题是。。。当用户编辑一个实体时,我应该检查他是否是这个实体的所有者。传统上(没有实体框架),我是通过在sql查询中包含where子句来实现的。例如: update posts set title = "Great Post" where post_id = 5 and owner_id = " + CurrentLogedinUser.Id + " 但我不知道如何在实体框架中实现它 有人能告诉我吗?如果owner\u id是您

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

update posts set
 title = "Great Post"
where 
 post_id = 5 and
 owner_id = " + CurrentLogedinUser.Id + "
但我不知道如何在实体框架中实现它


有人能告诉我吗?

如果
owner\u id
是您的
Post
实体上的一个属性,那么您不能在提交更新之前(甚至在允许他们编辑更新之前)检查它吗?

如果
owner\u id
是您的
Post
实体上的一个属性,那么您不能在提交更新之前检查它吗(或者甚至在允许他们编辑它之前)?

在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();

在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();

是的,我可以在允许他们编辑之前进行检查,但是如果有人手动准备表单并将其发送给serwer,那么这种方法将不起作用。但是在提交更新之前进行检查(我的第一个建议)仍然会阻止。是的,我可以在允许他们编辑之前检查它,但如果有人手动准备表单并将其发送给serwer,则此方法将不起作用。但在提交更新之前检查(我的第一个建议)仍然可以防止这种情况发生。是的……我认为这已经足够了。但是在这个解决方案中性能不是很好。没有更快的方法吗?你说在这个解决方案中性能不是很好是什么意思?你唯一要添加的是
if
检查-这只是将一个整数与另一个整数进行比较(我假设)。这一点也不会减慢速度。但您必须先获取行,然后再发送。在标准更新中,您只发送一次。条件是在db服务器上进行检查。@robson:这是使用ORM的一个缺点:将持久数据当作对象来处理,会牺牲一些性能。不过,我认为快速失败行为是可取的我宁愿在用户试图修改他们不拥有的东西时抛出一个异常,而不是简单地假装一切都很糟糕,而不实际更改数据库中的任何东西。是的……我认为这已经足够了。但是在这个解决方案中,性能不是很好。难道没有吗更快的方法?在这个解决方案中,什么是性能不好?唯一要添加的是
if
检查-这只是检查一个整数和另一个整数(我假设)。这一点也不会减慢速度。但您必须先获取行,然后再发送。在标准更新中,您只发送一次。条件是在db服务器上进行检查。@robson:这是使用ORM的一个缺点:将持久数据当作对象来处理,会牺牲一些性能。不过,我认为快速失败行为是可取的我宁愿在用户试图修改他们不拥有的东西时抛出一个异常,而不是简单地假装所有东西都是假的,而不实际更改数据库中的任何东西。