我們正在創建一個MVC4文檔檢索網站,其中一些文檔需要驗證,而其他文檔允許匿名訪問。有沒有辦法執行條件認證?
該URL包含用於檢索文檔列表的文件夾ID。有時候沒有文件需要認證,有時候所有文件都有,有時候是混合。
我該如何處理?提前致謝。
我們正在創建一個MVC4文檔檢索網站,其中一些文檔需要驗證,而其他文檔允許匿名訪問。有沒有辦法執行條件認證?
該URL包含用於檢索文檔列表的文件夾ID。有時候沒有文件需要認證,有時候所有文件都有,有時候是混合。
我該如何處理?提前致謝。
我會將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);
}
}
你甚至可以通過一個returnUrl
在日誌上這樣一旦他們在用戶登錄被重定向回他們想要的文件。
您可以在獲取潛在受限文檔的操作上創建自定義授權過濾器。
它將首先檢查文檔是否需要授權,方法是將其與受限文檔的靜態緩存ID列表進行比較。
然後,如果文檔被限制,過濾器將檢查當前用戶是否被授權。如果用戶被授權,該操作將被正常渲染。否則,操作結果應該放置401/403(以適用者爲準)或重定向到默認的「未經授權」頁面。