2013-03-28 21 views
0

人們,我已經收集了大量關於這件事的帖子,而我在這裏看不到光。在視圖中請求權限是正確的,或者它應該是MVC中的模型?

這是很容易問的執行權限/做或顯示視圖東西作爲控制器,但更復雜的做模型,至少是發生在我身上。 控制器,因爲您可以輕鬆地訪問會話對象:HttpContext.Current.Session [「UserPermissions」],並從視圖中我能有一個sessionmanager和accesing這樣的:SessionManager.IsAllowed(Permission.SuperUser),這是也在控制器中構建。但是,我們如何才能在連接數據庫的模型和業務層中輕鬆實現?

這是我的示例 -

當我需要從數據庫中獲得一些信息,並根據在用戶允許,我想不填充數據的對象,我知道用戶不能夠訪問。

可以很容易地分析視圖對象,只顯示該項目的用戶是允許看,但即使不是更好濾液這個項目之前把他們的觀點?

有人能告訴我一個例子,我實現了一個權限類來使用它跨越我所有的模型?

謝謝!

+0

一個簡單的例子與我所擁有的相同。 在視圖中的檢查: 如果(SessionManager.IsAllowed(Permission.DoChargebackAction)) 在控制器的方法: 公共靜態布爾IsAllowed(權限權限) { 返回GetUserPermissions()。包含(許可); } 公共靜態的IList GetUserPermissions(){ 如果 (SessionManager.IsNullUserPermissionSession()) 返回新的List (); return(IList )HttpContext.Current.Session [「UserPermissions」]; } – user2217909 2013-03-28 00:44:48

+5

您的模型不應該「伸手」以獲取任何數據。如果它依賴於來自會話等的權限,則應將該數據傳遞到模型中。 – 2013-03-28 00:54:35

回答

0

我通常有一個模型,在那裏我跟蹤所有重要的用戶屬性,如權限,用戶ID,姓名,電子郵件地址,等等並排位於一個CurrentUser類。保持模型在模型中可以方便地訪問控制器,這可能會發生很大一部分權限檢查,具體取決於您的應用程序。這也將允許CurrentUser模型作爲視圖模型傳遞給視圖。

我限制基於什麼樣的角色,用戶目前在他們的CurrentUser類只有在必要時通過CurrentUser對象視圖中的視圖中的項目。 CurrentUser類在應用程序的開始處實例化,並可根據需要更新或儘可能少地更新。我正在處理的當前應用程序要求用戶的角色經常更新。在控制器和模型

檢查用戶權限可能如果角色保持所述CurrentUser對象內被容易地完成。實現的方法,例如(使用MVC簡單成員資格提供):

bool IsUserInRole(string roleName) { 
    if (currentUser != null) 
     { 
      return currentUser.Roles.Contains(roleName); 
     } 
} 

給你所要檢查的當前角色的能力,不管你目前在什麼MVC的部分

我會推薦。反對將CurrentUser傳遞給數據抽象層(位於數據庫之上的層),而是以一種方式實現方法,即訪問需求可以作爲參數傳入,或者爲每個角色實現不同的方法正在使用。

相關問題