Защита контроллеров в ASP.NET MVC для правильного пользователя - PullRequest
0 голосов
/ 03 июня 2009

Я создаю приложение в ASP.Net MVC для регистрации задач.

Пользователь может удалять только свои задачи. Существует ли стандартный способ запретить другому пользователю, вошедшему в систему, просто ввести URL-адрес контроллера удаления с параметром [id] задачи, принадлежащей другому пользователю, таким образом удаляя задачу другого пользователя?

Пример:

Пользователь A имеет задачу с идентификатором 13. Когда пользователь A просматривает задачу, имеется ссылка на / tasks / delete / 13 для удаления записи задачи. Пользователь B может просмотреть задачу 13, а затем решает ввести / tasks / delete / 13 в адресную строку и поэтому удаляет задачу пользователя A.

Вам нужно написать свой собственный код в контроллере, чтобы предотвратить это, или есть стандартный способ, которым это обычно обрабатывается?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 04 июня 2009

Когда дело касается безопасности в ASP.NET MVC, у вас есть Аутентификация и Авторизация.

Аутентификация - это процесс проверки личности пользователя, который обычно включает проверку имени пользователя и пароля в базе данных, а затем присваивает какой-либо идентификатор пользователя этому пользователю.

Авторизация - это процесс ограничения доступа к системным ресурсам, который часто осуществляется через роли ( RBAC) . Однако роли часто не охватывают права собственности, а это то, что вам нужно.

В вашем случае вам нужно будет написать собственный код для проверки прав собственности на задачу, например:

if (!task.IsOwnedBy(userID))
{
  throw new HttpException ((int)HttpStatusCode.Unauthorized, 
                           "You are not authorized.");
}

Я задал подобный вопрос здесь Как вы включаете Аутентификацию, Роли и Безопасность в свой DDD? и еще не решили, как я собираюсь интегрировать это в свой бизнес-уровень.

1 голос
/ 03 июня 2009

Приложение NerdDinner имеет именно такой пример в контроллере Dinners.

http://nerddinner.codeplex.com/

Инструкции о том, как это сделать, находятся здесь:
http://nerddinnerbook.s3.amazonaws.com/Part9.htm

Переходите на полпути вниз по странице, пока не увидите заголовки: Использование свойства User.Identity.Name при создании обедов и Использование свойства User.Identity.Name при редактировании обедов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...