因此,我在编辑/详细信息方法上的网址会显示http://localhost:1234/Movies/Edit?ID=3。如果db表包含属于其他人的记录,例如1,2,4,5,6。没有什么能阻止用户直接输入和访问说记录6(例如/ Movie / Edit / 6)。
如何防止这种情况发生?
// GET: /Movie/Edit/id
public ActionResult Edit(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
//
// POST: /Movie/Edit/id
[HttpPost]
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
答案 0 :(得分:0)
这真的取决于你想要限制的内容以及你希望他们限制编辑权限的人,因此我将给出一个通用的答案。您可以为每种方法或整个班级申请授权。您可以使用[Authorize]
通用授权(必须注册并登录):
// GET: /Movie/Edit/id
[Authorize]
public ActionResult Edit(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
//POST: /Movie/Edit/id
[HttpPost]
[Authorize]
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
基于滚动的授权(您可以设置它,以便任何用户都可以说“管理员”角色只能访问这些方法):
// GET: /Movie/Edit/id
[Authorize(Role="Admin")]
public ActionResult Edit(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
//POST: /Movie/Edit/id
[HttpPost]
[Authorize(Role="Admin")]
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}