2012-02-18 9 views
2

誰かが自分のサイトにアクセスし、管理者が登録されていない場合は、その管理者登録ページにリダイレクトする必要があります。 これは、管理者がまったく登録されていない場合にのみ発生します。したがって、データベースが新しく、データなしで空の場合にのみ発生します。メインサイトに入る前に登録

すべてのコントローラにvalidation属性を付けてチェックを入れることができます。しかし、私はちょっとしたハックを見つけました...とにかく登録されている場合、チェックは完全に削除されるべきです。 これを達成する別の方法がありますか?

+1

あなたのサイトのユーザーを管理するために使用しているのは何ですか?管理ユーザーが存在する場合は、使用しているユーザー・リポジトリー・テクノロジーの形式を取り出す必要があります。 –

答えて

1

すべてのコントローラが継承するベースコントローラがある場合は、ベースコントローラに記述されている "validationattribute"をすべての要求に対して有効にすることができます。

編集

あなたは、アプリケーションが最初に出荷されたときにfalseに設定されていることAdminIsRegistered言うと呼ばれるweb.configファイル内のグローバル変数を格納することができます。最初の管理者がlike thisを登録し、それをtrueに設定すると、その値がプログラムによって変更されます。ベースコントローラに設定されたカスタム属性は、すべてのリクエストでその値をチェックすることができます。falseに設定されている場合、属性はユーザーを登録アクションにリダイレクトします。

+0

これで十分です。しかし、それが登録された後に、すべての要求に対してトリガするべきではありません。 – Nick

+0

@Nick私の答えを更新しました。 –

1

これを行う最も良い方法は、global filterです。あなたのアプリケーションにはregister it onceがあり、実行されるすべてのアクションが最初にフィルタにヒットします。グローバルフィルタコレクションに追加するには、Application_Start

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    GlobalFilters.Filters.Add(new AdminRequiredAttribute()); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
} 
+0

管理者が存在するかどうかを確認することで、フィルタ自体を短絡させることができ、要求処理を正常に続行できます。 –

関連する問題