2

フォーム認証と一般的なメンバーシップ システムを使用する ASP.NET サイト (この場合は MVC) があるとします。このサイトでは、認証済みユーザーと匿名ユーザーの両方が許可されています。

サイトをプライベート ベータ版としてリリースするとき、たとえばスーパーユーザーの単純なパスワード システムなど、アプリケーションの上に別のセキュリティ層を追加したいと考えています。ユーザーがこのセキュリティ層を通過した後も、フォーム認証/メンバーシップ システムを配置して、ベータ テスターがサイトを認証済みユーザーまたは匿名ユーザーとして表示できるようにしたいと考えています。

これを達成するための最も目立たない方法は何ですか? 新しいコードまたは変更されたコードの量が最小限で済む最も簡単なソリューションを探しています。たとえば、特別な Cookie をチェックするためにすべてのコントローラーを変更したくありません。もっと良い方法があるはず...

ここに非常によく似た質問がありますが、問題のサイト(公開されると)は匿名のリクエストのみを処理するように見えるため、必ずしも私の状況と比較するとは限りません. この回答は、ServerFault が何らかの Cookie システムを使用したことを示唆していますが、それがどのように実装されたかについての詳細はありません。

4

2 に答える 2

5

IIS でサーバー レベルでセキュリティを実装し、IIS サーバーを実行している Windows の Active Directory にアカウント/パスワードを追加します。

コードを変更する必要はありません。

于 2009-07-23T13:54:30.073 に答える
1

さて、あなたが現在のコントローラーを変更したくないことは知っていますが、同様の動作のために私がしたことは次のとおりです。
特定のアクセス チェックが必要なすべてのコントローラーに指定したカスタム ActionFilterAttribute を作成しました。あなたはこのようなものを持つことができます:

public class CheckBetaAccess : ActionFilterAttribute {
   public override void OnActionExecuting(ActionExecutingContext filterContext) {
        if (!canAccess) {
            filterContext.Controller.ViewData["someViewData"] = "some text";
            filterContext.Result = new ViewResult {
                ViewName = "the-view-anonymous-users-should-see",
                ViewData = filterContext.Controller.ViewData
            };
            filterContext.Result.ExecuteResult(filterContext);
        }
    }
}

次に、コントローラーを装飾しました:

[CheckBetaAccess]
public class SomeController : Controller {
    //....
}
于 2009-07-23T15:16:46.543 に答える