.Net Core Авторизация при отображении данных в представлении

Я пытаюсь добавить логику авторизации в мое веб-приложение.net core, чтобы только автор (записанный в каждой записи базы данных как имя пользователя) разрешал редактировать / удалять действия, которые могут читать только другие.

Я немного погуглил, похоже, что авторизация на основе ресурсов может удовлетворить мои требования: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased?view=aspnetcore-2.1&tabs=aspnetcore2x

Не уверен, что мне нужно написать много обработчиков для реализации логики, как показано в этом примере? https://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data?view=aspnetcore-2.1

Насколько я понимаю, логика выглядит так:

If current login user == the created by user in database record
    Display edit/delete link.
    Allow access the edit/delete action method in Controller.
Else
    Access is denied.

Должен ли я следовать образцу кода или написать свой собственный класс авторизации? И если проще написать свой собственный класс логики авторизации, как я могу вызвать логику как атрибут выше метода действия edit / delete в контроллере?

Спасибо.

1 ответ

Не уверен, что мне нужно написать много обработчиков для реализации логики, как показано в этом примере?

Там нет необходимости, вы могли бы определить один PermissionHandler который проверит разрешение пользователя в HandleAsync,

Как я могу вызвать логику как атрибут выше редактировать / удалить метод действия в контроллере?

Для вызова в качестве атрибута, вы можете попробовать как

[Authorize(Policy = "Read")]
[HttpPost("delete")]
public IActionResult Delete([FromBody]Item item)
{
  _itemService.Delete(item.Id);
  return Ok();
}

Для полной демонстрации попробуйте ссылаться на разные функции API для разных ролей.

Другие вопросы по тегам