我的网站上有一个页面,用户可以在其中更新数据库中的属性信息。目前,使用如下查询字符串提取属性详细信息:
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 不匹配而导致页面失败,我需要添加什么代码?
谢谢,加文