0

내 응용 프로그램에는 특정 권한이있는 사용자 만 액세스 할 수있는 여러 영역 (보기)이 있습니다. 현재 로그인 한 사용자가 주어진보기를 볼 권한이없는 경우 팝업 창이 나타납니다. 이 순간 사용자는보기를보기 위해 몇 가지 추가 정보를 제공 할 수 있습니다. 요점은 사용자가이 정보를 제공 할 때까지 현재보기를 떠날 수 없다는 것입니다. 지금까지 나는 그렇게 할 수 있다고 생각합니다. 우선 커스텀 AuthorizeAttribute를 정의했다. 이 속성은 제한된보기를 보호 할 책임이있는 controler에 적용됩니다. 내 속성은이ASP.NET MVC - 추가 자격 증명을 전달하는 모달 창

public class PopupAuthorizeAttribute : AuthorizeAttribute 
    { 
     public override void OnAuthorization(AuthorizationContext filterContext) 
     { 

      if (filterContext.HttpContext.Session["confirmed"] == null) 
      { 
       filterContext.Controller.ViewData["ShowPopup"] = true; 
      } 
      else 
       filterContext.Controller.ViewData["ShowPopup"] = false; 
     } 
    } 

다음처럼이 방법 Unfortunatelly

... 
... 
<body> 
    <div id="main"> 
      @{ 
       if ((ViewData[ShowPopup] != null && (bool)ViewData[ShowPopup])) 
       { 
       <script type="text/javascript"> 
        showPopUp(); 
       </script> 
       } 
      } 
     <div id="header"> 
      title 
     </div> 
     <div id="menu"> 
      @{ 
       Html.RenderAction("TopMenu", "Menu"); 
      } 
     </div> 
     <div id="treeView"> 
      @{ 
       Html.RenderAction("TreeMenu", "Tree"); 
      } 
     </div> 
     <div id="content"> 

      @RenderBody() 
     </div> 
    </div> 
</body> 
... 
... 

결과가 예상보다 달랐다에게보고 _Layout.cshtml를 수정 보인다. 이제 사용자가 접근 할 수없는보기가 렌더링되고 팝업이 표시됩니다. 난 내가을 ViewData에 저장된 정보를 losse 그렇게 그러나 경우에 그

public class PopupAuthorizeAttribute : AuthorizeAttribute 
     { 
      public override void OnAuthorization(AuthorizationContext filterContext) 
      { 

       if (filterContext.HttpContext.Session["confirmed"] == null) 
       { 
        filterContext.Controller.ViewData["ShowPopup"] = true; 
        filterContext.Result = 
        new RedirectResult(filterContext.RequestContext.HttpContext.Request.UrlReferrer.ToString()); 

       } 
       else 
        filterContext.Controller.ViewData["ShowPopup"] = false; 
      } 
     } 

같은 STH을하고 내 사용자 정의 속성에 이전에 현재보기를 리디렉션하려고 노력했다. 이 기능을 구현하기위한 우아하고 나은 방법이 있습니까? 불행히도 사용자를 "일반"페이지로 리디렉션 할 수 없으며 팝업 창에서이를 수행해야합니다.

답변

0

다른 작업으로 리디렉션하면 ViewData에 저장된 정보가 손실됩니다. 정보를 유지하려면 TempData []를 대신 사용할 수 있습니다.

그러나 귀하의 요구 사항에 대한보다 개선 할 수있는 해결책을 얻으려면 역할 기반 권한 부여 스키마를 참조하십시오. 귀하의 경우 컨트롤러는 사용자가 페이지의 특정 부분을 볼 수있는 적절한 역할을하는지 확인하고이 정보를 ViewData/ViewBag (Via User.IsInRole ("Administrator") 등)에 저장합니다. 뷰는 ViewData/ViewBag 내부의 정보를 기반으로 자체적으로 생성됩니다.

설정하려면이 작업을 수행하는 것이 좋습니다. 적절한 자습서를 찾으려면 인터넷 검색을해야합니다. 작업을 완료 할 때 web.config 파일은 아래의 것과 유사한 무언가가 필요합니다 간단히 말해서 http://weblogs.asp.net/scottgu/archive/2006/07/23/Recipe_3A00_-Implementing-Role-Based-Security-with-ASP.NET-using-Windows-Authentication-and-SQL-Server.aspx

:

<roleManager enabled="true" defaultProvider="YourRoleProvider"> 
     <providers> 
      <clear /> 
      <add name="YourRoleProvider" 
       applicationName="YourApplicationName" 
       type="YourProject.Models.YourRoleProvider" 
       connectionStringName="YourDatabaseConnectionString" /> 
     </providers> 
    </roleManager> 
+0

기본적 덕분에 여기

내가 그 좋은 것 발견 하나입니다 내 역할 나는 역할 공급자처럼 sth 않습니다. 진짜 문제는 popWindow를 보여줄 수있는 방법을 알아내는 것입니다. 일반적인 roleprovider에서 로그인 페이지로 리디렉션됩니다. 그러나 현재보기에서 팝업 창을 표시합니다. – Berial

+0

실제로 리다이렉트 및 로그인 인증은 MembershipProvider에서 처리합니다. 보기에 "팝업 창"을 표시 할 수있는 방법은 여러 가지가 있습니다. 대답에 "팝업"창이 표시되는지 확인하는 방법에 더 많은 관심이있었습니다. 모달 팝업 창을 표시하는 한 가지 방법은 jQuery UI 라이브러리를 사용하는 것입니다. Dialog 컨트롤이있어, 꽤 좋기 전에 사용했습니다. –