Атрибут для проверки логики аутентификации в .NET Core API

Стек — это последняя версия .NET Core с C#.

Мы вставляем один и тот же код, проверяющий, пытается ли кто-то изменить свой собственный профиль (у нас есть их profileId из JWT) почти в каждый контроллер:

if (User.GetProfileId() != profileId)
  return Unauthorized();

Я немного не понимаю, как убрать эту избыточность. Я определенно могу добавить универсальное промежуточное ПО или filter для этого, но это кажется неуклюжим. Есть ли способ добавить атрибут [MustOwnProfile] и запустить тест .NET Core в приведенном выше коде везде, где появляется атрибут?

Пример вышеуказанной проверки в контексте:

    [HttpPost]
    [Route("{profileId:int}/start-profile/{checklistId:int}")]
    [Authorize]
    public async Task<IActionResult> StartProfile(int profileId, int checklistId)
    {
      if (User.GetProfileId() != profileId)
        return Unauthorized();

      await _profileService.StartProfile(profileId, checklistId);
      return Ok();
    }

person VSO    schedule 02.09.2020    source источник
comment
Я предполагаю, что авторизованный пользователь может редактировать только собственный профиль, тогда я думаю, что «User.IsAuthenticated())» должно быть достаточно для этой проверки.   -  person Ravi    schedule 03.09.2020


Ответы (1)


Можно определить пользовательские атрибуты. Отмена и сокращение

person Joel Fleischman    schedule 02.09.2020