Как реализовать авторизацию на основе ресурсов в базовой многоуровневой архитектуре asp.net? - PullRequest
0 голосов
/ 11 февраля 2019

Приложение - ASP.У нас есть юридические лица - пользователи и документы.Каждый пользователь проходит проверку подлинности, поэтому у меня есть userId на стороне сервера.У меня есть ресурс - документ.Каждый документ имеет автора (userId).И у нас есть действие с отправкой документов, которое может выполнить автор.Мне нужно авторизовать текущего пользователя как автора текущего документа для отправки.Итак, во всех руководствах я вижу такие рекомендации:

[Authorize]
        public async Task<IActionResult> Send(int id)
        {
            var document = _documentRepository.Get(id);

            if (document == null)
            {
                return new NotFoundResult();
            }

            var authorizationResult = await _authorizationService.AuthorizeAsync(User, document, new MyRequirement());
            if (authorizationResult.Succeeded)
            {
                return Ok();
            }
            else
            {
                throw...;
            }
        }

Но что, если я не хочу получать документ?Мое общее взаимодействие API-BL выглядит следующим образом:


[Authorize]
        public async Task<IActionResult> Send(int id)
        {
            await _documentSender.SendAsync(id);
        }

И где я должен вызывать AuthorizationService в моем случае?Мне нужно каждый раз звонить получателю документа?

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете просто вставить авторизацию в свой вызов _documentSender.SendAsync, например, что-то вроде:

await _documentSender.SendAsync(id, User.FindFirstValue(ClaimTypes.NameIdentifier));

Заявка NameIdentifier является идентификатором пользователя.Другими словами, вы просто передаете идентификатор текущего пользователя своему методу и выполняете авторизацию внутри.

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