DDD - Как правильно реализовать сервис авторизации с Identity в приложении .NET Core MVC - PullRequest
0 голосов
/ 03 июля 2018

У меня есть MemoController, который получает некоторые заметки (с именем, описанием, идентификатором, идентификатором пользователя). Каждая заметка принадлежит одному пользователю. Я создал контроллер API для получения заметки по идентификатору.

[HttpGet("{memoId}")]
[Authorize]
public async Task<ActionResult> Get(Guid memoId)
{
    // A way to get user id
    //var userId = User.Identity.IsAuthenticated ? Guid.Parse(User.Identity.Name) : Guid.Empty;

    var memo = await _memoService.GetByIdAsync(memoId); // Can get memo from other users

    if (memo == null) return NotFound();

    return Json(memo);
}

Каждый пользователь должен иметь доступ только к своим заметкам. Проблема в том, что прямо сейчас пользователь может получать заметки, принадлежащие другим пользователям. Можно ли ввести что-то вроде UserMemoService, которое получает идентификатор пользователя из System.Security.Claims? Я хочу сделать это, следуя принципам DDD (не реализуя сервис в конструкторе контроллера или более сложный беспорядок).

1 Ответ

0 голосов
/ 03 июля 2018

Вам необходима авторизация на основе ресурсов. Существуют разные реализации, в зависимости от ваших предпочтений. Например, вы можете реализовать собственную политику авторизации, которая будет использовать вашу пользовательскую службу, которая проверяет, совпадает ли запрашивающий пользователь документ с владельцем документа.

Ссылка: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased?view=aspnetcore-2.1&tabs=aspnetcore2x

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