2012-04-06 1 views
1

안녕하세요, 약간의 문제가 있습니다. 리뷰 컨트롤러의 색인 세그먼트에서 다음 코드를 사용해 보았습니다.사용자 게시글에 고유 한 삭제/업데이트/편집을 할 수 없습니다.

var Info = db.tblReviews.Include(x => x.tblGame).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList(); 
return View(Info); 

과 제 내에서 I 적용한 검토 컨트롤러의 생성 : 그래서,

ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName"); 
return View(new tblReview { UserName = @User.Identity.Name }); 

내 문제는 내가 사람들이 게임에 대한 리뷰를 작성 할 수 있도록 노력하고있다 유명 그것을있어 게시 모든 사용자 게임은 독특하고 게임은 자신의 계정으로 만 볼 수 있지만 편집/삭제/U에 관해서는 pdating 나는 사용자가 게임 리뷰를 올리면 자신의 게임만을 삭제/업데이트/편집 할 수 있고 다른 사용자는 편집 할 수 없도록한다.

예를 들어 내가 만든 두 명의 사용자가 sham과 bam을 가지고 있는데, 각 사용자는 리뷰 페이지에 게시 한 게임을 볼 수 있지만 편집/업데이트 및 삭제와 관련하여 사용자는 모두 삭제/수정 및 업데이트됩니다 각자 다른 게시물. ,

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using GameTest.Models; 

namespace GameTest.Controllers 
{ 
    public class ReviewController : Controller 
    { 
     private gamezoneDBEntities db = new gamezoneDBEntities(); 

     // 
     // GET: /Review/ 

     public ViewResult Index() 
     { 
      var Info = db.tblReviews.Include(x => x.tblGame).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList(); 
      return View(Info); 
     } 

     // 
     // GET: /Review/Details/5 

     public ViewResult Details(int id) 
     { 
      tblReview tblreview = db.tblReviews.Find(id); 
      return View(tblreview); 
     } 

     // 
     // GET: /Review/Create 

     public ActionResult Create() 
     { 
      ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName"); 
      return View(new tblReview { UserName = @User.Identity.Name }); 
     } 

     // 
     // POST: /Review/Create 

     [HttpPost] 
     public ActionResult Create(tblReview tblreview) 
     { 
      if (ModelState.IsValid) 
      { 
       db.tblReviews.Add(tblreview); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName", tblreview.GameIDFK); 
      return View(tblreview); 
     } 

     // 
     // GET: /Review/Edit/5 

     public ActionResult Edit(int id) 
     { 
      tblReview tblreview = db.tblReviews.Find(id); 
      ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName", tblreview.GameIDFK); 
      return View(tblreview); 
     } 

     // 
     // POST: /Review/Edit/5 

     [HttpPost] 
     public ActionResult Edit(tblReview tblreview) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Entry(tblreview).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName", tblreview.GameIDFK); 
      return View(tblreview); 
     } 

     // 
     // GET: /Review/Delete/5 

     public ActionResult Delete(int id) 
     { 
      tblReview tblreview = db.tblReviews.Find(id); 
      return View(tblreview); 
     } 

     // 
     // POST: /Review/Delete/5 

     [HttpPost, ActionName("Delete")] 
     public ActionResult DeleteConfirmed(int id) 
     {    
      tblReview tblreview = db.tblReviews.Find(id); 
      db.tblReviews.Remove(tblreview); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      db.Dispose(); 
      base.Dispose(disposing); 
     } 
    } 
} 

당신이 더 필요한 경우 나 많은

답변

1

그것은 당신의 데이터 구조를 볼 수있는없이 대답하기는 어렵습니다 감사 감사

알려 주시기 바랍니다 :

이 내 검토 컨트롤러 그러나 나는 도우려고 노력할 것이다.

귀하의 Index() 작업에서 게임을 검색하기 위해 사용자 이름을 얻는 것을 볼 수 있습니다. 따라서 검토 객체가 해당 리뷰 객체를 만든 사용자에 대한 참조를 저장하는 것처럼 보입니다.

따라서 업데이트/삭제시 사용자 이름을 다시 검색하고 리뷰 개체의 사용자 이름과 일치하지 않으면 작업을 수행하지 마십시오.

public ActionResult Edit(int id) 
    { 
     //See if this review id was created by the current user 
     if(!db.tblReviews.Any(UserInfo => UserInfo.UserName.Equals(User.Identity.Name) && UserInfo.Id == id)) 
     { 
      //Redirect the user away from this edit page, they can't edit this one. 
     } 

     tblReview tblreview = db.tblReviews.Find(id); 
     ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName", tblreview.GameIDFK); 
     return View(tblreview); 
    } 
+0

몇 가지 코드를 제공 할 수 있습니까? – user1137472

+0

소스 코드가 추가되었습니다. – SouthShoreAK