У меня проблема с аутентификацией выбранного пользователя из базы данных на основе возвращенных элементов. Я нашел решение, однако на самом деле я не думаю, что он правильный (хотя он работает).MVC Проверьте, является ли возвращенный пользователь из базы данных активным пользователем?
Вот что происходит (упрощено).
я следующий класс подключен к базе данных:
public class Company
{
[Key]
public int Id { get; set; }
public string CompanyName { get; set; }
public string Description { get; set; }
public ApplicationUser CEO { get; set; }
}
Это означает, что одна компания может иметь один генеральный директор (владелец компании), но генеральный директор может иметь несколько компаний (другая история, просто объясняю сейчас) ,
Тогда у меня есть контроллерCompaniesController
, который выглядит следующим образом:
public IActionResult Index()
{
var items = _context.Companies.Include(n=>n.CEO).ToList();
return View(items);
}
который возвращает List<Company>
всех компаний, которые находятся в базе данных. Кроме того, если я не укажу .Include(n=>n.CEO)
, тогда поле CEO будет пустым.
Наконец на View У меня есть следующая вещь:
@foreach (var item in Model)
{
<tr>
<td>@item.CompanyName</td>
<td>@item.Description</td>
@if (@item.CEO?.Email == User.Identity.Name)
{
//Show edit button for CEO
<td><a asp-action="Edit" asp-route-id="@item.Id">Edit</a></td>
}
else
{
//Logged user is not expected user therefore insert empty column and do not show button
<td></td>
}
</tr>
}
Путь, как я проверяю ли вернулся CEO
из моей модели активно вошедшего в систему пользователя, сравнивая их адреса электронной почты (Пользователь должен авторизоваться для входа на эту страницу, поэтому он всегда будет входить в систему).
Вопрос: Есть ли лучший, более элегантный способ, как проверить активный пользователь, является ли генеральным директором для каждого элемента в List<Company>
или это правильный подход?
Кроме того, как правильно хранить данные пользователя в таблице базы данных Company
? Я применил собственную модель Identity, которая автоматически генерирует 4 или 5 таблиц идентификации в базе данных, и поэтому, когда я проверяю поле своего CEO в базе данных SQL, я могу видеть, что это всего лишь ссылка на UserId
.
Любая помощь/предложения в этом вопросе будет более чем оценена.