我的网站上有一个页面,用户可以在数据库中更新属性通知。目前,使用如下查询字符串提取属性详细信息:
http://somedomain.com/account/PropertyRooms.cshtml?propertyid=18
我遇到的问题是,我只希望用户能够更新自己的财产,而不是其他人。目前,任何用户都可以手动更改查询字符串并编辑其他属性。
我试图使用“AutheticatedUser”值的变体将其锁定,并将其与表格中的“ownerID”列相匹配。如果它们不匹配,我想重定向到错误或登录页面?这是我当前的配置,部分有效。
@{
Layout = "~/_SiteLayout.cshtml";
WebSecurity.RequireAuthenticatedUser();
var CurrentUser = WebSecurity.CurrentUserId;
var db = Database.Open("StayInFlorida");
var rPropertyId = Request.QueryString["PropertyID"];
var Propertyinfo = "SELECT * FROM PropertyInfo WHERE PropertyID=@0 AND OwnerID=@1";
var qPropertyinfo = db.QuerySingle(Propertyinfo, rPropertyId, CurrentUser);
}
<h2>Property Information</h2>
<form method="post" action="">
<fieldset>
<label>Property ID</label>
<input class="input-mini" id="disabledInput" type="text" value="@qPropertyinfo.PropertyID" placeholder="Disabled input here..." disabled>
</fieldset>
</form>
我需要知道这是否是保护我网站的最佳方式,还是应该先运行单独的SQL查询来检查?如果我做得对,如果页面失败,我需要添加什么代码,因为OwnerID和PropertyID不匹配?
谢谢,加文
答案 0 :(得分:1)
这就是我接近它的方式。您通常应该尽可能地减少对数据库的调用。换句话说,如果您可以通过一次调用解决问题,那么您不应该寻找需要更多的替代解决方案。
如果没有行匹配用户id和propertyid,则qPropertyInfo变量将为null,因此您可以测试:
@if(qPropertyInfo != null){
//let them update their details
}
else{
//display a no results found message
}
您可以在我的文章中阅读有关如何检查查询是否在ASP.NET网页中返回数据的更多信息:http://www.mikesdotnetting.com/Article/214/How-To-Check-If-A-Query-Returns-Data-In-ASP.NET-Web-Pages