2012-01-24 8 views
0

多言語.Net 4 Webフォームサイト(www.example.com/en/、www.example.com/fr/など)があり、各言語にはメンバーエリア、例えばwww.example.com/en/members/およびwww.example.com/fr/members/実行時にパスへの匿名アクセスを拒否する方法

CMS(Umbraco)は、言語のブランチとコンテンツを制御するため、それらの追加や削除を制御します。つまり、ルートweb.configの<location>セクションを使用して、各メンバーブランチへの匿名アクセスを拒否し、アプリケーションの開始後に公開することはできません。

System.Configuration.ConfigurationインスタンスのLocationsインスタンスにアプリケーションを再起動せずにConfigurationLocationセクションを追加する方法はありますか?あるいは、実行時にパスアクセスを制御するためのより柔軟な方法がありますか?

答えて

0

私が使用した解決策は、HttpModuleを作成することでした。しかし、umbracoのHttpModuleでは、currentNodeIdを簡単に取得することはできません。これは、これが別のプロセスの一部として追加されるためです。

モジュールはPostAuthenticateRequestイベントに以下のチェックを行わ:

  1. はumbracoの予約パス要求されたパスですか?
  2. ユーザーは既に認証されていますか?

これら二つの両方が要求ドメインを使用して偽

  1. を返した場合、私はマッチングasscociatedドメインでノードを見つけることによって、ルートノードIDを取得しました。
  2. 次に、要求されたパスの部分を使用してxpathクエリを作成しましたが、上に取得したidを持つノードの下に存在していました。このクエリは私に現在のノードを与えました。
  3. 次に、現在のノードが認証を必要とするノードの子孫として存在するかどうかを確認しました。
1

または、 実行時にパスアクセスを制御する柔軟性の高い方法がありますか?

あなたはページを確保しようとしているかわからない場合は Page_Load event

if(!HttpContext.Current.User.Identity.IsAuthenticated) 
    Response.Redirect("Login.aspx"); 

更新

内でこのような何かを持っているBasePageからすべてのセキュアなページを拡張することができ

上記のコードを変更して、データベーステーブルから保護する必要があるページを読み込み、現在のページ名をテーブルのリストに含まれているものと比較します。リストをキャッチして、たとえば20分ごとにキャッシュを自動的に期限切れにすることができます。少なくとも、セキュアであるべきものを事前に知る必要がない限り、柔軟性を維持しながら、アプリケーションを再起動せずにセキュアとしてページをフラグすることができます。

+0

確かに、安全なページは何かを事前に知っていない場合はどうなりますか? – Digbyswift

+0

@Digbyswiftもしあなたがこれをプログラム的に最初に実装しようとしていたら、事前にわからないのですか? – Icarus

+0

質問をお読みください。私はウェブに位置要素を追加できるようにしたいと考えていました。アプリを起動した後にアプリを再起動せずに設定します。しかし、私はこれが可能ではないと確信しているので、私は代わりをしたい。 – Digbyswift

関連する問題