0

私のアプリケーションでは、特定の特権を持つこれらのユーザーのみがアクセスできるいくつかの領域(ビュー)があります。現在ログに記録されているユーザーには、特定のビューを表示する権限がありません。ポップアップウィンドウが表示されます。この瞬間、ユーザはビューを見るためにいくつかの追加情報を与えることができます。要点は、ユーザーがこの情報を提供するまで現在のビューを残すことができないことです。これまでのところ、私はそうすることができると思います。まず、カスタムAuthorizeAttributeを定義しました。この属性は、制限されたビューを保護する役割を果たすコントロールに適用されます。私の属性は、この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; 
     } 
    } 

次のようになります。私は生憎の結果は、私が予想以上に異なっていた

... 
... 
<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をやって、私のカスタム属性の前の1に、現在のビューをリダイレクトしようとしました。この機能を実現するためのエレガントな方法がありますか?不幸にも、私はユーザーを「通常の」ページにリダイレクトできません。これはポップアップウィンドウで行う必要があります。

答えて

0

ViewDataに格納された情報は、別のアクションにリダイレクトした後に失われます。情報を保持したい場合は、代わりにTempData []を使用できます。

しかし、あなたの要件をより保守的に解決するには、ロールベースの認証スキームを使用します。あなたのケースでは、コントローラが、ページの特定の部分を表示するための適切な役割を果たすかどうかをチェックし、この情報をViewData/ViewBagに保存します(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によって処理されます。ビュー上に「ポップアップ」ウィンドウを表示するにはいくつかの方法がありますが、私は「ポップアップ」ウィンドウを自分の答えに表示するかどうかを判断する方法にもっと関心がありました。モーダルポップアップウィンドウを表示する1つの方法は、jQuery UIライブラリを使用することです。その中にダイアログコントロールがあります。かなり使いやすいように使用しています。 –

関連する問題