2012-08-06 19 views
1

我嘗試爲我的應用程序實現登錄。 用戶可以有多個角色(查看者,操作員,管理員等)。 但是他必須選擇一個他想要登錄的角色, ,所以他可能有管理員權限但他可以作爲沒有管理員權限的「查看者」登錄。具有特定角色的c#RoleProvider登錄

現在的問題是,如果我嘗試使用RequiredRole屬性爲管理員確保某些功能,那麼即使用戶具有管理員權限,用戶也應該無法訪問此功能。

是從框架支持這樣一個beaviour還是有人做過類似的事情?

不管怎樣,謝謝您的幫助

回答

0

你沒有指定你想,當他試圖做一些事情,需要聯繫時,他的身份登錄,查看發生了什麼,而是因爲你可以實現你自己的角色提供,這很容易做到。

您應該能夠在會話或用戶主體對象中存儲說明「可用角色」的內容(例如,其中一些將無法選擇管理員),然後是另一個用於選定角色。您需要做的就是將一些頁面放入您的網站,以允許用戶選擇他們當前的角色。

由於您將使用自己的角色提供程序,因此只需實現此操作即可在檢查角色時將相關信息從會話(或用戶主體)中提取出來。您仍然可以根據需要使用RequiredRole屬性。

當您無法將您重定向到403頁面(例如With ASP.NET membership, how can I show a 403?)時,您可以通過幾個例子來改變從重定向到登錄表單的行爲。然後你可以在這個頁面上顯示一些東西,如果有一個可用的話,用戶可以切換到更高的角色。

+0

您好,感謝您的快速響應:) 等客戶端,我可以存取權限與用戶對象: WebContext.Current.User 這個自定義的用戶對象具有兩個屬性CurrentRole和AvailableRoles。用戶可以選擇他的角色的登錄也已經實現,但是現在我不知道如何訪問我的RoleProvider中的CurrentRole以適應我的GetRolesForUser方法,我認爲這應該只是返回此當前角色?或者我必須修改IsUserInRole方法嗎? 感謝您的幫助=) – huserben 2012-08-06 12:10:27

+0

您將需要實現'IsUserInRole',並可能'GetRolesForUser'。從這兩個你應該能夠訪問'HttpContext.Current',從那裏你可以訪問用戶和會話對象。這應該是你所需要的。 GetRolesForUser應該只返回「當前」角色。 – Richard 2012-08-06 12:29:42

+0

嗨,再次感謝,我現在嘗試這種方式......在我看來它應該工作......但我現在遇到了異常: 如上所述,我們有一個自定義用戶對象來存儲這些額外的信息,如當前角色 當我嘗試訪問HttpContext.Current.User它是從類型IPrincipal而WebContext.Current.User是我們的自定義對象,所以我無法訪問所需的信息=/ 我想如果我會得到這些信息我的問題將被解決... – huserben 2012-08-06 12:54:32

相關問題