我正在開發論壇並嘗試創建「編輯頁面」,但我只希望能夠讓創建該帖子的用戶能夠請參閱「編輯控件」,並且是唯一可以編輯其頁面的用戶。我應該怎麼做?檢查是否已登錄用戶,與登錄相同
這個問題,我現在有多遠:
@if (WHAT TO TYPE HERE)
{
@Html.ActionLink("Edit", "Edit", "Threads", new { @id = Model.Id }, null)
}
的answere加入COMMENT
我正在開發論壇並嘗試創建「編輯頁面」,但我只希望能夠讓創建該帖子的用戶能夠請參閱「編輯控件」,並且是唯一可以編輯其頁面的用戶。我應該怎麼做?檢查是否已登錄用戶,與登錄相同
這個問題,我現在有多遠:
@if (WHAT TO TYPE HERE)
{
@Html.ActionLink("Edit", "Edit", "Threads", new { @id = Model.Id }, null)
}
的answere加入COMMENT
您answeres奧萊特感謝,但我發現了一個其他的方式,我做的方式是
的Controler:
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Thread thread = db.Threads.Find(id);
string userId = User.Identity.GetUserId();
if (thread == null || thread.ApplicationUserId != userId)
{
return HttpNotFound();
}
ViewBag.CategoryId = new SelectList(db.Categorys, "Id", "Title", thread.CategoryId);
return View(thread);
}
[HttpPost]
[ValidateInput(false)]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Title,Content,CategoryId")] Thread thread)
{
if (ModelState.IsValid)
{
Thread t = db.Threads.Include(m => m.ApplicationUser).FirstOrDefault(m => m.Id == thread.Id);
t.Content = thread.Content;
t.Title = thread.Title;
db.Entry(t).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Post", "Threads", new { @id = thread.Id });
}
return View(thread);
}
查看:
@if (Model.ApplicationUserId == User.Identity.GetUserId())
{
@Html.ActionLink("Edit", "Edit", "Threads", new { @id = Model.Id }, null)
}
這工作:)
感謝所有回答
您需要將當前用戶進行比較後的原作者。我想你有一個數據庫?
假設你有一個論壇主題/後一種模式:
public class ForumPost
{
public int Id { get; set; }
public string Author { get; set; }
// [...] Additional fields.
}
的Author
場應例如包含創建後的一個的用戶名。當查看後,你應該:
HttpContext.Current.User.Identity.Name
比較到後Model.Author
的作者,你可以這樣做:
@if (HttpContext.Current.User.Identity.Name.Equals(Model.Author))
{
@Html.ActionLink("Edit", "Edit", "Threads", new { @id = Model.Id }, null)
}
我沒有編譯器與我,但此代碼應該工作。
但我不會直接在視圖中做這個。您應該創建一個視圖模型,其中包含所有必要的字段以滿足您的視圖。
如果尚未在其他地方,首先檢查用戶是否經過驗證,然後再考慮你使用的是什麼樣的身份驗證(你應該給你的問題更多的細節)。例如,如果您使用Windows身份驗證的財產「User.Identity.Name」還包含域
if (HttpContext.Current.User.Identity.IsAuthenticated && HttpContext.Current.User.Identity.Name.Equals(Model.Author))
這樣做檢查的觀點是完全正常的,只要你心中有這樣一個純粹的功能UX :這個開關的作用應該只是讓一個按鈕變得可見,你不應該給它任何安全擔憂。
的「是否允許修改的信息的用戶」安全始終要檢查在編輯控制器動作,在這裏你必須再做一次檢查後端。 總是檢查誰可以在Get動作的開始處執行動作。
'此處輸入的內容'應該由'當前登錄的用戶創建的這篇文章'替換' – dotctor
您應該將當前用戶與創建該文章的用戶進行比較。我想你的論壇後面有一個數據庫?然後你應該將當前用戶('HttpContext.Current.User.Identity.Name')與'Model.Author'進行比較(如果你有一個字段)。 我會把用戶/用戶名放在視圖模型中。嘗試儘可能使用強類型視圖和查看模型。您的視圖現在被綁定到HttpContext對象。 –
它是ASP.NET MVC? – StepUp