一部のドキュメントは認証を必要とし、他のドキュメントは匿名アクセスを許可する MVC4 ドキュメント検索サイトを作成しています。
URL には、ドキュメントのリストを取得するために使用されるフォルダー ID が含まれています。どのドキュメントも認証を必要としない場合もあれば、すべてのドキュメントで認証が必要な場合もあれば、それらが混在している場合もあります。
これにどのようにアプローチしますか?前もって感謝します。
一部のドキュメントは認証を必要とし、他のドキュメントは匿名アクセスを許可する MVC4 ドキュメント検索サイトを作成しています。
URL には、ドキュメントのリストを取得するために使用されるフォルダー ID が含まれています。どのドキュメントも認証を必要としない場合もあれば、すべてのドキュメントで認証が必要な場合もあれば、それらが混在している場合もあります。
これにどのようにアプローチしますか?前もって感謝します。
制限されている可能性のあるドキュメントを取得するアクションで、カスタム承認フィルターを作成できます。
最初に、静的にキャッシュされた制限付きドキュメントの ID リストと比較して、ドキュメントに承認が必要かどうかを確認します。
次に、ドキュメントが制限されている場合、フィルターは現在のユーザーが承認されているかどうかを確認します。ユーザーが承認されている場合、アクションは通常どおりレンダリングされます。それ以外の場合、アクションの結果は 401/403 (どちらか適切な方) またはデフォルトの「未承認」ページへのリダイレクトとともに配置する必要があります。
bool RequiresAuthenticationドキュメントを含むデータベース テーブルに項目を追加します。これはfalse、ドキュメントが無料 (認証不要) のtrue場合とそうでない場合です。
次に、ドキュメントを提供するコントローラーでこのようなことを行うことができます。
public Details(int Id)
{
    Document doc = databaseContext.Document.Find(Id);
    if(doc.RequiresAuthentication)
    {
        if(User.Identity.IsAuthenticated)
        {
            return View(doc);
        }
        // If the user is not authenticated, redirect them to log on
        return RedirectToAction("LogOn", "Account");
    }
    else
    {
        return View(doc);
    }
}
ログオンにa を渡すこともできるreturnUrlので、ユーザーがログオンすると、必要なドキュメントにリダイレクトされます。