返されたアイテムに基づいてデータベースから選択されたユーザーを認証する際に問題があります。私は解決策を見つけましたが、実際にはそれが正しいとは思わない(たとえそれが働いていても)。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
の参照にすぎません。
この件に関するお手伝いやご提案は高く評価されます。