2015-10-05 49 views
0

我目前有一個自定義屬性放在我的管理控制器和家庭控制器上。自定義屬性將首先進入活動目錄,以檢查用戶是否在特定的AD中,使其具有管理權限給整個應用程序。如果用戶不在AD組中,那麼定製屬性將在安全表中查看它們是否具有可以賦予其管理權限,添加記錄權限,刪除記錄權限和/或更新記錄權限的安全記錄。從Ajax調用mvc C訪問HttpContext當前會話#

我在執行屬性期間設置當前用戶並將其添加到HttpContext.Current.Session。在整個頁面加載我正在Ajax調用加載我的網頁的每個部分的數據和安全性不能在ajax調用訪問。我想通過他們擁有的權限來隱藏和顯示不同的按鈕(添加,刪除,編輯和刪除)。

我讀我可以使用屬性

[WebMethod(EnableSession = true)] 

我的方法,它的工作原理,但我不認爲這是最好的做法,我知道這會降低性能相當多。我也讀過這個更多用於Web API而不是MVC應用程序。在Ajax調用過程中,有沒有更好的方式來訪問HttpContext中的會話數據?

回答

0

如果它只是顯示/隱藏邏輯,爲什麼你不這樣做,在剃刀的意見(你可以從那裏訪問會話),像下面:

@{ 
    var user = (MyUser)Session["Current_User"]; 
    // MyUser can have IsInRole method for security checking 
} 
<section class="view-body"> 
    @if (user.IsInRole("ServiceOrder_Create") || user.IsInRole("ServiceOrder_Assign")) 
    { 
     <input type="button" id="edit_btn" /> 
    } 
    @if (user.IsInRole("ServiceOrder_Delete")) 
    { 
     <input type="button" id="delete_btn" /> 
    } 
</section> 

當然,我們有在Web API方法中再次檢查用戶的權限。 Web API默認是無狀態的,這意味着我們無法直接訪問會話,但有一個技巧可以幫助我們在這裏啓用會話Enable session in Web Api 2

+0

我們沒有使用開箱即用的授權。我們正在使用自定義屬性。 User.IsInRole不適用於我們的解決方案。 – Juan

+1

這只是一個例子,無論如何我編輯了我的答案,請再次檢查,以便更清楚地瞭解 – phnkha

+1

呃。爲什麼即使打擾使用Web Api,如果你打算做一些啓用會話之類的事情。 Web Api的重點在於創建一個真正的REST投訴API。否則,你總是可以在MVC中創建端點並做任何你喜歡的事情。 –