无法使删除/更新/编辑对用户帖子唯一
本文关键字:用户 唯一 更新 删除 编辑 | 更新日期: 2023-09-27 18:30:22
嗨,伙计们,我有一个小问题可能是一个困难的问题,我尝试在我的评论控制器的索引段中使用以下代码来做到这一点:
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);
}
}
}
如果您需要更多,请告诉我,谢谢
非常感谢
如果看不到您的数据结构,很难回答这个问题,但我会尽力提供帮助。
我可以在您的Index()
操作中看到您正在获取用户名以检索游戏。因此,看起来您的审阅对象存储了对创建它的用户的一些引用。
因此,在更新/删除时,只需再次检索用户名,如果它与 review 对象上的用户名不匹配,请不要执行该操作。
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);
}