Asp.net MVC3登录用户只能看到除管理员之外的自己的东西

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

asp.net和mvc3的新手。我通过给自己设置挑战/开发应用程序来学习。我标记用户与ProviderUserKey交互的所有记录表。现在,我希望能够限制登录的用户只能编辑或删除自己的记录,但管理员可以编辑或删除任何记录。我一直在使用脚手架生成控制器和视图等,例如用于编辑`//POST:/POST/Edit/5的代码

    [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-我已修复了示例