Asp.net MVC3登录用户只能看到除管理员之外的自己的东西
asp.net和mvc3的新手。我通过给自己设置挑战/开发应用程序来学习。我标记用户与ProviderUserKey交互的所有记录表。现在,我希望能够限制登录的用户只能编辑或删除自己的记录,但管理员可以编辑或删除任何记录。我一直在使用脚手架生成控制器和视图等,例如用于编辑`//POST:/POST/Edit/5的代码Asp.net MVC3登录用户只能看到除管理员之外的自己的东西,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,asp.net和mvc3的新手。我通过给自己设置挑战/开发应用程序来学习。我标记用户与ProviderUserKey交互的所有记录表。现在,我希望能够限制登录的用户只能编辑或删除自己的记录,但管理员可以编辑或删除任何记录。我一直在使用脚手架生成控制器和视图等,例如用于编辑`//POST:/POST/Edit/5的代码 [HttpPost] public ActionResult Edit(PJpost pjpost) { if (ModelState.Is
[HttpPost]
public ActionResult Edit(PJpost pjpost)
{
if (ModelState.IsValid)
{
db.Entry(pjpost).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(pjpost);
}`
非常感谢您提供的任何帮助。您需要查看用户角色和授权过程通常,MVC会在it模板中提供注册和登录,包括帐户控制器。要限制用户访问,必须为用户分配角色 它背后的代码看起来像这样
[Authorize(Roles="admin")]
public ActionResult admin()
{
//Action gives an admin rights since the user is in the admin role
return View();
}
[Authorize(Roles="manager")]
public ActionResult manager()
{ //give a managers rights since user is im managers roles.
return View();
}
如果您有一个通用的编辑方法/操作,并且希望保持这种方式,我会在控制器中添加一个类似ValidateOwnership(记录)的方法。此方法需要验证CurrentUser的ID是否与记录上的ID匹配,以及该用户是否是特定角色的成员,这可以通过RoleManager类完成。方法将返回true/false。 准备好后,只需在ModelState验证之后在代码中调用该方法。看起来是这样的
[HttpPost]
public ActionResult Edit(PJpost pjpost)
{
if (ModelState.IsValid)
{
if(IsOwnershipValid(pjpost){
db.Entry(pjpost).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
else {
ModelState.AddModelError("ERROR","You're not allowed to do that");
return View(pjpost);
}
}
return View(pjpost);
}
编辑:
因此,所有权验证可以如下所示:
public bool ValidateOwnership(Pjpost pjpost) {
if (pjpost.MemUID == Membership.GetUser().ProviderUserKey.ToString())
{
return true;
}
else
{
return false;
}
}
我希望这就是你的意思。谢谢寒冷和折磨。Torm是的,您的解决方案就是我的意思,但您仍然必须在ValidateOwnership(record)
//验证所有者公共操作结果ValidateOwnership(){Pjpost Pjpost=db.Pjpost.Find();{if(Pjpost.MemUID==Membership.GetUser().ProviderUserKey.ToString()){return true;}否则{return false;}}}
我好像做了一件非常错误的事,谢谢你的折磨,我在返回true和返回false行中得到了这些错误:错误1无法将类型“bool”隐式转换为“System.Web.Mvc.ActionResult”,但您当然可以:)方法的返回类型应该是bool,而不是action result-我已修复了示例