2011-06-01 174 views
2

我在我的應用程序中使用Windows身份驗證。我正在使用實體框架使用MVC3-Asp.Net。我有一個菜單列表,它們是按鈕。我使用站點地圖顯示他們。我可以使用Active目錄中可用的角色隱藏或顯示這些按鈕。我有兩個問題授權MVC3-ASP.NET

1)如果我以基本用戶身份登錄(某些按鈕對我來說不可見),這是我想要的,但如果我輸入控制器/操作(本頁應該不可見對我來說)在瀏覽器中加載。

解決方案:

我檢查用戶和其在操作第一線作用,如果我被授權看到這一點,那麼我顯示否則重定向到其他頁面。 從Active Directory驗證用戶需要時間。

2)如果我登錄爲基本用戶,並試圖看到一個行動被授權爲超級用戶仍然顯示(當我手動輸入控制器和動作名稱)

解決方案:

我正在檢查用戶及其角色作爲Action中的第一行,如果我被授權查看該內容,那麼我將顯示其他頁面重定向。 從Active Directory驗證用戶需要時間。

澄清:

我可以使用授權與角色屬性,我想這只是針對ASP.NET成員資格,因此不會似乎我的角色工作從Active Directory來了在系統。

問:

可以在任何一個點我的解決方案,其中不是檢查每個視圖的權限可我這樣做,在全球的。 asax文件。如果我在登錄時可以對用戶進行身份驗證,則無需爲其他視圖進行身份驗證。

回答

1

在這兩種情況下,我會建議你編寫自定義RoleProvider Active Directory Role Provider。 然後,如果您已正確設置了您的MembershipProvider和RoleProvider,那麼授權屬性應該可以工作。

要避免通過RoleProvider檢索用戶對每個請求的角色,可以緩存該用戶在會話中的角色。您可以在自定義RoleProvider中或通過使用自定義Authorize屬性來完成此操作。

+0

下來的選民可以解釋爲什麼這是下來投票?謝謝 – Eranga 2011-06-01 13:30:32

+0

我不知道,誰低估了這一點。 – 2011-06-01 13:38:03

+0

我不是Session的大粉絲,它讓事情如此緩慢,有時無法預測行爲,謝謝你的回答。 – 2011-06-01 14:16:28