无法使删除/更新/编辑对用户帖子唯一

时间:2012-04-06 16:08:07

标签: c# asp.net asp.net-mvc-3 asp.net-mvc-3-areas

大家好我有一个小问题可能是一个很难的我试图用我的评论控制器的索引段中的以下代码执行此操作:

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

并且在我已应用的评论控制器的第一个创建中:

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

我的问题是我试图让人们在游戏上撰写评论,av得到它以便发布游戏的所有用户都是唯一的,游戏只能通过自己的帐户查看,但是当涉及到编辑/删除/更新我无法得到它,以便用户发布游戏评论只能删除/更新/编辑自己的游戏,而不是其他用户。

例如,我有两个名为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 个答案:

答案 0 :(得分: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);
    }