2010-02-08 66 views
1

我正在研究一個新的綠色領域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.

回答

0

,如果你碰巧使用ASP.Net/ASP.Net MVC,我會說最好的地方是通過自定義HTTP模塊來處理驗證請求方法&僅在請求已通過身份驗證時才繼續請求。這個代碼有很多優秀的在線文章。

另外 - 看看角色& ASP.Net的成員 - 這是相當不錯&通常滿足大多數要求,或者你總是可以自由地擴展它。再次 - 噸定製會員供應商上的文章...

除非我失去了一些東西 - HTH。

+0

謝謝Sunny對於http模塊提示,沒有考慮到......至於ASP。網絡角色和會員資格,對於那些人來說,我是一個堅強的人,但他們這次沒有考慮到這個問題:-s –

+0

另外,我應該說,而不是讓人們跳到另一個頁面(就像HTTP模塊可能做的那樣),我將使用CheckSecurity基本頁面方法來更改子類別頁面,例如禁用按鈕,隱藏面板等,我會更新我的問題,... –