如何只允许“拥有”数据的用户进行编辑?

时间:2011-03-29 05:13:50

标签: authentication asp.net-mvc-3

我知道如何使用注释仅允许特定角色的授权用户或用户,但我如何才允许拥有数据的个人编辑它。

如果我有用户foo和用户栏。 Foo可以前往localhost/User/Edit/Foo并输入他的详细信息。如何防止Foo转到localhost/User/Edit/Bar并编辑条形码信息呢?如果您尝试编辑不属于您的配置文件,Stack Overflow将为您提供找不到的页面。这是怎么做到的?

2 个答案:

答案 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