2009-03-06 10 views
0

ライトセッションオブジェクトを使用してユーザーの認証の詳細を保持するカスタム認証方法を実行しています。今では、各ページ(マスターの主に子ページ)が、ユーザーがページにアクセスする必要があるかどうかを判断できるようにしたいと考えています。子ページを持つASP.NETでのカスタム承認

ページクラスを作成し、それから子ページを派生する必要がありますか?

アプリケーションがどのロールがどのページにアクセスできるかを知る最も良い方法は何ですか?

答えて

0

承認に大きな柔軟性が必要な場合は、カスタムページクラスを使用する方がよいでしょう。それ以外の場合はWeb.configで十分です。

0

カスタムロールプロバイダを使用してプラグインすると、実際にはasp.net構成に依存することができます。あなたはその後、許可を設定するには、web.configファイルで、通常のアプローチを使用して取得

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(
    "~/admin/test.aspx", principal, "GET" 
); 

:あなたは、ユーザーが特定のページにアクセスすることを許可されているかどうかを確認することができます方法があります。そうするときに、ページが同じフォルダにある場合は、web.configをそのフォルダに追加し、適切な権限を設定するだけです。

0

は同じシナリオでは、私は、フォルダ内の認証を必要とするページを入れて、私はそのように認証を設定するには、web.configファイル内の場所要素を定義します。

<location path="protected"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location> 
1

私は、ベースページのアプローチが好きではありません。私には、セキュリティ対策をチェックするのは遅すぎる。 独自のHttpModuleを作成して、認証情報をデータベース/ xml/...に格納するか、ページ上のリフレクションを使用して読み取るかを確認できます。

context.Handlerは、実行中のクラスページを保持します。したがって、あなたがこのような何か行うことができます。

私は、私が使用したコードの一部をコピーし、それは、役割、公開ページをチェックし、画像やスクリプトのチェックをスキップします(しかし、あなたは同様にそれを行うことができます):

// In the HttpModule: 
    public void context_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     HttpContext context = HttpContext.Current; 

     // Don´t validate permissions if the user wasn´t allowed by the asp.net security 
     // Neighter the advanced (custom) permissions are validated for non ASPX files. 
     if (!context.Request.FilePath.EndsWith(".aspx") || !context.User.Identity.IsAuthenticated) 
      return; 

     // Give full access to the unathorized error page, and logins, and so on... 
     string pageClass = context.Handler.GetType().BaseType.FullName; 

     string param = context.Request["p"]; 
     if (!string.IsNullOrEmpty(param)) 
      pageClass += "@" + param; 

     if (SecurityService.IsFullTrustClass(pageClass)) 
      return; 

     if (SecurityService.Context.CurrentPerson == null) 
     { 
      LogOff(); 
      return; 
     } 

     // Verify access permissions for the current page 
     IList<Role> roles = SecurityService.Context.CurrentPerson.Roles; 
     bool allow = SecurityService.HasAccessPermission(pageClass, roles); 

     if (!allow) 
     { 
      LogOff(); 
     } 
    } 
関連する問題