如果這個問題有點偏離主題,讓我知道。 我會把它放在其他地方,但我想獲得一些關於如何在現有項目中完成某些工作的想法。是否可以在ASP.NET MVC&Identity 2.0中緩存授權?
我的web應用程序(使用ASP.NET MVC 5和ASP.NET Identity 2.0)通過自定義角色提供程序執行授權(通過那些花式的Authorize
屬性)。 每個授權檢查(如Authorize(Roles = "Admin")
)需要查詢數據庫執行以下操作:
- 獲取當前「學期」(檢查當前的日期&時間落入什麼日期範圍)從
Semesters
表 - 獲取
Positions
表中名稱爲「Admin」的位置 - 檢查
Leaders
表中是否存在包含當前用戶ID,獲取的學期ID和獲得的位置ID的記錄。
如果記錄存在,用戶被授權,否則他們是不會。 爲了清楚起見,爲了將相應的特權限制在一個學期的時間內,分配給一個學期與一個學期相關聯。 即,一旦學期結束時,用戶不再擁有自己的權力,但任命了下學期旁邊的人會立即獲得他們的。
我的大多數用戶都屬於那些在大多數他們所訪問的網頁的檢查,但並不是所有的角色。 所有這些步驟都執行,每次我需要授權。
有沒有辦法緩存(這樣我就不必不斷地查詢數據庫),這些授權的時間長度相當於從第一次執行檢查/緩存到學期結束的時間? 或者只是將它們緩存在合理的任何時間量? 理想的情況下,如果一個學期或位置無論出於何種原因更新的授權會以某種方式被視爲無效,重新緩存。 最後,一個自定義的RoleProvider是一個堅實的方法來解決這個問題?
值得注意的是,從安全角度來看,這些細節並不是以明文形式存儲的。它們以加密方式存儲,如ASP.NET_SessionId = fegias ...; .AspNet.ApplicationCookie = QPHpjno5QPgbpt ... –