0

У меня проблема с аутентификацией выбранного пользователя из базы данных на основе возвращенных элементов. Я нашел решение, однако на самом деле я не думаю, что он правильный (хотя он работает).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.

Любая помощь/предложения в этом вопросе будет более чем оценена.

ответ

1

1: Вы можете написать вспомогательный метод, который будет возвращать на

def method(signed_in_user, company_id) 
    # it will return if the user is CEO of that company id or Not 
end 

2: Вы можете сделать фильтр, показывающий все компании и принадлежащие компании, такими как бутстраповский тумблер данных.

3: Вы можете сделать две базы данных вызовов 1: user.companies (где он СЕО) 2: companies.where (signed_in пользователь не СЕО) Написать свой для петель.

Я не занимаюсь программированием на C#, но эти шаблоны могут помочь

 Смежные вопросы

  • Нет связанных вопросов^_^