我知道如何使用注释仅允许特定角色的授权用户或用户,但我如何才允许拥有数据的个人编辑它。
如果我有用户foo和用户栏。 Foo可以前往localhost/User/Edit/Foo
并输入他的详细信息。如何防止Foo转到localhost/User/Edit/Bar
并编辑条形码信息呢?如果您尝试编辑不属于您的配置文件,Stack Overflow将为您提供找不到的页面。这是怎么做到的?
答案 0 :(得分:1)
您的控制器都可以访问User.Identity对象(http://msdn.microsoft.com/en-us/library/system.web.httpcontext.user.aspx)
您可以使用此信息来确定当前经过身份验证的用户。然后,您可以检查用户是否具有以下内容的权限:
public ActionResult Foo(int id)
{
if (DatabaseService.DoesUserHavePermission(User.Identity.Name, id) == false)
return View("ErrorPage");
return View("SuccessPage", yourdata);
}
或者,您可以使用只返回当前已验证用户的数据的方法:
public ActionResult Foo(int id)
{
var data = DatabaseService.GetDataForUser(User.Identity.Name);
return View(data);
}
答案 1 :(得分:1)
只需将我的两分钱加到@mfanto's answer,因为你使用的是ASP.NET MVC 3,你可以使用新的HttpNotFoundResult
,如:
return new HttpNotFoundResult();
//Or using the shorthand method
return HttpNotFound();
如果您想要的是return View("ErrorPage")
重定向,请而不是404