_@if (Request.IsAuthenticated && User.Identity.Name=="administrator")
{
<div id="sidebar">
<div class="module">
<ul class="menu">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
<div class="mainContent">
Hello, @User.Identity.Name !
</div>
</div>
_
ユーザーが管理者として認証されている場合、これは私のレイアウトですが、この種のチェックは見栄えがよくないため、ユーザーの名前ではなくユーザーの役割をチェックする必要があります。
これがコントローラーメソッドです
_ public ActionResult AuthenticatedUserLayout(string username)
{
var lst=userContext.UserProfiles.ToList();
var user = lst.Select(u => u.UserName == username);
if(IsAdmin(Session["LoginUser"].ToString())) return View(user); else return Index();
}
_
また、return View(user)
は、user
を使用する方法がわからないため、良くないこともわかりました。
@if (Request.IsAuthenticated && User.IsInRole("Administrators"))
{
<div id="sidebar">
<div class="module">
<ul class="menu">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
<div class="mainContent">
Hello, @User.Identity.Name !
</div>
</div>
}
デイブの答えは正しいです。モデルでIsAdministrator
またはCanSeeSidebar
というプロパティを使用することを検討し、その質問への回答をdomain logicとして扱うことをお勧めします。
ビューはモデルでのみ機能するはずです。データベースからのスレッドの読み取りは、ドメインの質問に答えるという点で同じです。コントローラーがモデルをビューに渡す前に、これらすべてのタイプの質問に回答する必要があります。
ASP.NET Core Razorページの場合
if (User.Identity.IsAuthenticated && User.IsInRole("Administrator"))