web-dev-qa-db-ja.com

かみそりページでログインユーザーロールを確認する

_@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を使用する方法がわからないため、良くないこともわかりました。

50
Asp Asp
@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>
}
107
Dave Alperovich

デイブの答えは正しいです。モデルでIsAdministratorまたはCanSeeSidebarというプロパティを使用することを検討し、その質問への回答をdomain logicとして扱うことをお勧めします。

ビューはモデルでのみ機能するはずです。データベースからのスレッドの読み取りは、ドメインの質問に答えるという点で同じです。コントローラーがモデルをビューに渡す前に、これらすべてのタイプの質問に回答する必要があります。

13
Honorable Chow

ASP.NET Core Razorページの場合

if (User.Identity.IsAuthenticated && User.IsInRole("Administrator"))
9
Ozan BAYRAM