我正在研究一個新的綠色領域ASP.Net應用程序。我們正在實現一個基於所有頁面的基礎頁面,呃,基於。該應用程序將在集成Windows身份驗證下運行,因此我將獲得用戶的帳戶詳細信息。有了這些,我會去幾個數據庫(用戶將存在)來找出它們在每個數據庫中分配的角色。我將在bool數組中擔任角色yay/nay,並通過枚舉鍵入它。SQL角色安全+自定義ASP.Net基本頁面
將會有一個會話對象,它將包含幾件事情以及爲該用戶分配的角色。我想製作可作爲比較的基準網頁屬性會話對象,因爲代碼將是這樣的:
public SessionObject MasterSessionObject
{
get
{
if (Session["SessionObject"] == null)
{
// Create session object, assign user name, etc.
// Do something with roles...
Session["SessionObject"] = sessionObject;
}
return (SessionObject)Session["SessionObject"]
}
}
爲了控制(子類)頁面上會發生什麼,我想要提供CheckSecurity方法 - 例如如果用戶沒有被授權到頁面的某個部分,它可以被隱藏/禁用,或者它們可以被引導回到「不是你的」頁面。它的邏輯位置是基本頁面,但是當基本頁面已經公開包含角色權限的SessionObject時,創建一個DatabaseSecurity類型對象並檢查它是否更有意義?
爲了處理後一種方法,我使用了抽象基類來讓我目前爲止:我有一個DatabaseRoles抽象類,它包含bool數組以及一個用於檢索用戶角色的方法。具體實現包含Enum(如前所述)以鍵入數組(在基類中)。抽象類也有CheckRole方法,它接受一個int值,我打算使用這個枚舉值。
SessionObject包含幾個這些DatabaseRoles實現,基本上不需要在基本頁面類CheckSecurity,導致在實際的頁面,這樣的代碼:
if (MasterSessionObject.SampleDatabaseRoles.Check((int)SampleDatabaseRolesEnum.RoleView))
{
// Do something
}
但是,我相信你會同意,它看起來蘇茨基...
如果有一個基本頁面上的CheckSecurity方法,它將不得不採取具體的DatabaseRoles對象,而且還要檢查哪個角色的枚舉,好吧,真糟糕。最後,將有在日後添加更多的數據庫及其安全設置的要求...
如果需要的話,我會添加代碼的明天...:-s
我不知道,我沒那麼厚,但我有一個困難時期,有時結合這一切一起...
謝謝
邁克K.
謝謝Sunny對於http模塊提示,沒有考慮到......至於ASP。網絡角色和會員資格,對於那些人來說,我是一個堅強的人,但他們這次沒有考慮到這個問題:-s –
另外,我應該說,而不是讓人們跳到另一個頁面(就像HTTP模塊可能做的那樣),我將使用CheckSecurity基本頁面方法來更改子類別頁面,例如禁用按鈕,隱藏面板等,我會更新我的問題,... –