prosource

레이저 페이지에서 로그인 사용자 역할 확인

probook 2023. 7. 17. 21:13
반응형

레이저 페이지에서 로그인 사용자 역할 확인

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

ASP.NET 코어 레이저 페이지용

if (User.Identity.IsAuthenticated && User.IsInRole("Administrator"))

데이브의 대답은 정확합니다.저는 당신이 당신의 모델에서 사용하는 것을 고려하는 것을 제안하고 싶습니다.IsAdministrator또는CanSeeSidebar그리고 그 질문에 답하는 것을 도메인 논리로 취급합니다.

뷰는 모델에서만 작동해야 합니다.스레드를 보고 데이터베이스에서 읽는 것은 도메인 질문에 답한다는 점에서 동일합니다.컨트롤러가 모델을 보기로 넘기기 전에 이러한 유형의 모든 질문에 답해야 합니다.

여기 면도기 페이지에서 직접 할 수 있는 다른 방법이 있습니다.사용자 관리자 및 역할 관리자에 대한 액세스 권한만 있으면 됩니다.

참고: 내 구현에서는 사용자 지정 사용자 및 역할 클래스를 사용합니다.사용자 지정 사용자 또는 역할 클래스가 없는 경우 모든 <User> 인스턴스를 <IdentityUser>로 바꾸고 <Role>을 <IdentityRole>로 바꿉니다.

이렇게 하면 레이저 페이지 내에서 할당된 각 역할에 대한 실제 역할 개체에 직접 액세스할 수 있으며, 저처럼 역할에 사용자 지정 필드가 연결되어 있는 경우 유용합니다.

@inject SignInManager<User> SignInManager
@inject UserManager<User> UserManager
@inject RoleManager<Role> RoleManager

@{
    List<Role> UserRoles = null;

    if(SignInManager.IsSignedIn(User)){
        UserRoles = (from Role R in RoleManager.Roles.ToList() where User.IsInRole(R.Name) select R).ToList();
    }
}

@if (SignInManager.IsSignedIn(User))
{
    //Show the user's role(s)'
    @if (UserRoles != null)
    {
        @foreach (Role Role in UserRoles)
        {
            <p>@Role.Name</p>
        }
    }
} else
{
    <p>Please log in</p>
}

언급URL : https://stackoverflow.com/questions/14969167/checking-login-user-role-in-razor-page

반응형