最近幫朋友做了一個自認為比較成功的日常辦公管理項目,全部程序用ASP編寫,考慮到以前做的權限控制實在不是很成功,這次重新設計了一下權限控制部分,所有權限控制的驗證角色的相關函式、初始化角色函式均放在一個頁面popedom.asp中。
由于用戶的權限角色是存儲在數據庫用戶權限表中,可以感知一下權限表的內容:user -> roles,現在,我的解決辦法是將user -> roles存放在Dictionary中,并作為全局變量(這里的全局變量的意思是page級的,如果作為Application級的全局變量,應該性能會更好,但如果過多使用會有負面效應,這將降低Web服務器的性能)。
這里用個實際的用戶、角色說明一下:
Jane 是屬于多個項目組的成員:項目a, 項目b, 項目c
John屬于項目b和c
Emily屬于項目a
==========================
1.將查詢用戶角色與角色驗證分離:
通過RecordSet查詢,全部用戶及角色都被存放在dic中,其對應關系是user -> roles,如果要驗證某一個或多個用戶的角色,只需要操作dic就可以,這樣分離的好處不言而喻:有助于代碼的可讀性和維護性。
2.避免多次查詢和驗證: 你現在想知道John是否是項目b的成員,ok!你用RecordSet權限表中查詢John的權限,在另一個地方,你又想知道Jane和Emily是否是項目a的成員,你又用RecordSet查詢了一次權限表,有問題啊!誰會這么去做呢?多次操作RecordSet查詢權限顯然是不明智的,將全部用戶及角色保存在dic中,需要查詢某個人的角色時,只需要從dic中取得就可以。
|