Как получить данные для пользователя spesifi c без передачи идентификатора в качестве параметра? - PullRequest
1 голос
/ 11 марта 2020

Я делаю API с. NET Core 2.1 с SQL базой данных и EF core.

Моя модель "Item" содержит пользователя, поскольку при создании элемента он принадлежит пользователю.

Как я должен запрашивать элементы для пользователя из базы данных det в моем API? Мне кажется плохой практикой передавать userID как параметр в GET-запросе.

Я думаю, что мне нужна некоторая авторизация токена, но все, что я могу найти в inte rnet, - это создание доступа к ролям. Мне нужен только пользователь, чтобы иметь доступ к своим собственным данным.

Я довольно новичок во всем этом, поэтому буду признателен за простое решение.

Вот мой текущий код (не хорошая практика?):

[HttpGet("{id}/items")]
public IEnumerable<Item> GetUserItems([FromRoute] int id)
{
   var items = Context.Items.Where(i => i.User.UserId == id);

   return items;
}

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Если вам нужны элементы зарегистрированного пользователя, вы можете ввести IHttpContextAccessor и в _httpContextAccessor.HttpContext.User вы должны найти то, что вам нужно.

В противном случае добавьте GUID «IdentityId» с индексом для класс пользователя и запрос, использующий это:

context.Users.FirstOrDefault(u => u.IdentityId == guid)?.Items;
1 голос
/ 11 марта 2020

Это две разные вещи.

Во-первых, пропуск удостоверения личности считается плохим для некоторых людей (не для меня). Чтобы это исправить, вы можете захотеть добавить столбец GUID в свою таблицу пользователей, а затем использовать этот GUID вместо ID.

Во-вторых, разрешить одному пользователю доступ только к его собственным данным. Это требует некоторой работы. Но в целом вам нужно взглянуть на проверку подлинности на основе утверждений (https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims?view=aspnetcore-3.1). В этой ссылке, в примере, вы видите, что они используют утверждение «EmployeeNumber», вы можете сделать то же самое с вашим новым столбцом GUID.

...