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; } 
} 

1社単独CEO(会社の所有者)を持つことができますが、最高経営責任者(CEO)は(今のために説明する、別の話を)複数の会社を持つことができることを意味。

public IActionResult Index() 
{ 
    var items = _context.Companies.Include(n=>n.CEO).ToList(); 
    return View(items); 
} 

データベース内にあるすべての企業のList<Company>を返す:

それから私はこのようになりますコントローラCompaniesControllerを持っています。さらに、.Include(n=>n.CEO)を入力しないと、CEOフィールドはnullになります。私は私のモデルからCEOを返されたが、積極的にユーザーにログインしているかどうかをチェックしていますどのような方法は、(ユーザーがする必要がある自分のメールアドレスを比較することである

@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> 
} 

は最後にビューに私は次のようなものを持っていますこのページを入力する権限があるため、彼は常にログインします)。

質問:どのようにアクティブなユーザーがList<Company>に各項目の最高経営責任者(CEO)であるか、これが正しいアプローチであるかどうかを確認するためのより良い、よりエレガントな方法はありますか?

さらに、ユーザーデータをCompanyデータベーステーブルに保存する方法は正しいですか?私はデータベース内に4つまたは5つのIDテーブルを自動的に生成するネイティブIDモデルを採用しています。したがって、SQLデータベースのCEOフィールドを確認すると、それはちょうど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:user.companies(彼は最高経営責任者(CEO)である場合) 2:companies.where(signed_inのユーザーが最高経営責任者(CEO)ではありません) はループのためにあなたを書くあなたは2つのデータベースが 1を呼び出すことができます。

私はC#プログラミングには参加していませんが、このパターンは役に立ちます。

関連する問題