所有
我创建了一个SQL查询,通过检查查询字符串和UserID是否返回计数1来检查用户是否拥有数据库中的记录。这是下面的代码,它完全正常:
@{
Layout = "~/_SiteLayout.cshtml";
WebSecurity.RequireAuthenticatedUser();
var db = Database.Open("StayInFlorida");
var rPropertyId = Request.QueryString["PropertyID"];
var rOwnerId = WebSecurity.CurrentUserId;
var auth = "SELECT COUNT (*) FROM PropertyInfo WHERE PropertyID = @0 and OwnerID = @1";
var qauth = db.QueryValue (auth, rPropertyId, rOwnerId);
}
@if(qauth==0){
<div class="container">
<h1>You do not have permission to access this property</h1>
</div>
}
else {
SHOW CONTENT HERE
}
问题是我需要在至少10个不同的页面上应用此检查,将来可能更多?我全都是使用可重用的代码,但我不知道我怎么能写这一次,并在每个页面上引用它是必要的。我已经尝试在中间嵌套布局页面的代码块中执行此操作,但我遇到了错误。关于什么是最好的方法的任何建议?或者我将不得不将其复制并粘贴到每个页面?
谢谢,加文
答案 0 :(得分:3)
“Razor”方式是使用函数(http://www.mikesdotnetting.com/Article/173/The-Difference-Between-@Helpers-and-@Functions-In-WebMatrix)。
将以下内容添加到App_Code文件夹中名为Functions.cshtml的文件中:
@functions {
public static bool IsUsersProperty(int propertyId, int ownerId)
{
var db = Database.Open("StayInFlorida");
var sql = @"SELECT COUNT (*) FROM PropertyInfo
WHERE PropertyID = @0 and OwnerID = @1";
var result = db.QueryValue (sql, propertyId, ownerId);
return result > 0;
}
}
然后在你的页面中:
@{
Layout = "~/_SiteLayout.cshtml";
WebSecurity.RequireAuthenticatedUser();
var propertyId = Request["PropertyID"].AsInt();
var ownerId = WebSecurity.CurrentUserId;
}
@if(!Functions.IsUsersProperty(propertyId, ownerId)){
<div class="container">
<h1>You do not have permission to access this property</h1>
</div>
}
else {
SHOW CONTENT HERE
}