Как разрешить редактировать только пользователю, который «владеет» данными? - PullRequest
2 голосов
/ 29 марта 2011

Я знаю, как использовать аннотацию, чтобы разрешить только авторизованным пользователям или пользователям в определенных ролях, но как я могу позволить ТОЛЬКО человеку, которому принадлежат данные, редактировать их.

Если у меня есть пользователь foo и панель пользователя. Фу может перейти к localhost/User/Edit/Foo и указать свои данные. Как я могу запретить Foo переходить на localhost/User/Edit/Bar и редактировать информацию Bars? Переполнение стека дает вам страницу не найдена, если вы пытаетесь изменить профиль, который не ваш. Как это сделать?

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Просто добавьте мои два цента к ответу @ mfanto , поскольку вы используете ASP.NET MVC 3, вместо этого вы можете использовать новый HttpNotFoundResult, например:

return new HttpNotFoundResult();

//Or using the shorthand method
return HttpNotFound();

return View("ErrorPage"), если вы хотите перенаправить 404

1 голос
/ 29 марта 2011

Все ваши контроллеры имеют доступ к объекту 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...