2015-12-18 198 views
0

我正在開發論壇並嘗試創建「編輯頁面」,但我只希望能夠讓創建該帖子的用戶能夠請參閱「編輯控件」,並且是唯一可以編輯其頁面的用戶。我應該怎麼做?檢查是否已登錄用戶,與登錄相同

這個問題,我現在有多遠:

@if (WHAT TO TYPE HERE) 
{ 
    @Html.ActionLink("Edit", "Edit", "Threads", new { @id = Model.Id }, null) 
} 

的answere加入COMMENT

+0

'此處輸入的內容'應該由'當前登錄的用戶創建的這篇文章'替換' – dotctor

+0

您應該將當前用戶與創建該文章的用戶進行比較。我想你的論壇後面有一個數據庫?然後你應該將當前用戶('HttpContext.Current.User.Identity.Name')與'Model.Author'進行比較(如果你有一個字段)。 我會把用戶/用戶名放在視圖模型中。嘗試儘可能使用強類型視圖和查看模型。您的視圖現在被綁定到HttpContext對象。 –

+0

它是ASP.NET MVC? – StepUp

回答

0

您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) 
     } 

這工作:)

感謝所有回答

4

您需要將當前用戶進行比較後的原作者。我想你有一個數據庫?

假設你有一個論壇主題/後一種模式:

public class ForumPost 
{ 
    public int Id { get; set; } 
    public string Author { get; set; } 
    // [...] Additional fields. 
} 

Author場應例如包含創建後的一個的用戶名。當查看後,你應該:

  1. 從你的資料庫檢索此如果你想這樣做,在你看來
  2. 當前用戶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) 
} 

我沒有編譯器與我,但此代碼應該工作。

但我不會直接在視圖中做這個。您應該創建一個視圖模型,其中包含所有必要的字段以滿足您的視圖。

0

如果尚未在其他地方,首先檢查用戶是否經過驗證,然後再考慮你使用的是什麼樣的身份驗證(你應該給你的問題更多的細節)。例如,如果您使用Windows身份驗證的財產「User.Identity.Name」還包含域

if (HttpContext.Current.User.Identity.IsAuthenticated && HttpContext.Current.User.Identity.Name.Equals(Model.Author)) 

這樣做檢查的觀點是完全正常的,只要你心中有這樣一個純粹的功能UX :這個開關的作用應該只是讓一個按鈕變得可見,你不應該給它任何安全擔憂。

的「是否允許修改的信息的用戶」安全始終要檢查在編輯控制器動作,在這裏你必須再做一次檢查後端。 總是檢查誰可以在Get動作的開始處執行動作。