내 응용 프로그램에는 특정 권한이있는 사용자 만 액세스 할 수있는 여러 영역 (보기)이 있습니다. 현재 로그인 한 사용자가 주어진보기를 볼 권한이없는 경우 팝업 창이 나타납니다. 이 순간 사용자는보기를보기 위해 몇 가지 추가 정보를 제공 할 수 있습니다. 요점은 사용자가이 정보를 제공 할 때까지 현재보기를 떠날 수 없다는 것입니다. 지금까지 나는 그렇게 할 수 있다고 생각합니다. 우선 커스텀 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을하고 내 사용자 정의 속성에 이전에 현재보기를 리디렉션하려고 노력했다. 이 기능을 구현하기위한 우아하고 나은 방법이 있습니까? 불행히도 사용자를 "일반"페이지로 리디렉션 할 수 없으며 팝업 창에서이를 수행해야합니다.
기본적 덕분에 여기
내가 그 좋은 것 발견 하나입니다 내 역할 나는 역할 공급자처럼 sth 않습니다. 진짜 문제는 popWindow를 보여줄 수있는 방법을 알아내는 것입니다. 일반적인 roleprovider에서 로그인 페이지로 리디렉션됩니다. 그러나 현재보기에서 팝업 창을 표시합니다. – Berial
실제로 리다이렉트 및 로그인 인증은 MembershipProvider에서 처리합니다. 보기에 "팝업 창"을 표시 할 수있는 방법은 여러 가지가 있습니다. 대답에 "팝업"창이 표시되는지 확인하는 방법에 더 많은 관심이있었습니다. 모달 팝업 창을 표시하는 한 가지 방법은 jQuery UI 라이브러리를 사용하는 것입니다. Dialog 컨트롤이있어, 꽤 좋기 전에 사용했습니다. –