2015-05-26 122 views
0

我有asp.net MVC 4應用程序,我想顯示基於角色的列。例如。以下是我的模特班。在asp.net mvc列明智的基於角色的安全4

public class Employee 
{ 
    public int Id {get;set;} 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
    public string Designation {get;set;} 
} 

在我看來,我只想顯示指定列,如果用戶是管理員角色。

我可以通過檢查用戶是否在角色中輕鬆地在視圖上執行此操作。但那是我不想做的。我想在列基上建立安全性。所以如果我的用戶沒有管理權限,指定將是空字符串。

這是可能的ASP.NET MVC 4?任何幫助將不勝感激!。

+0

東西在視圖中需要檢查的權限,因爲它不是違約,要麼你使用'GridView'組件,並覆蓋基於任何自定義的'render'屬性,這些屬性將創建在'Designation'財產,或創建一個它的擴展方法。 – balexandre

+0

謝謝你的建議!那裏有沒有例子? –

+0

你的網格使用什麼組件或插件? – Yasser

回答

0

我不知道的方式在MVC 4要做到這一點,比其他的,如你所說,在視圖中做檢查。

您可以考慮的是根據用戶角色呈現完全不同的視圖。

當然,這可能會導致其他問題,如重複代碼等,但它是一個選項。

+0

仍然是我問的目的沒有送達!我希望列級別的安全性。在你的情況下,指定將仍然存在,但你沒有顯示它們。 –

+0

你說過:「在我看來,只有當用戶具有管理員角色時,我纔想顯示指定列。」這樣做。指定不會顯示在非管理員視圖中。 – ozz

+0

是的,但仍然可以看到數據。想想你的觀點是由設計師開發的場景,他不知道這應該顯示與否。我想限制數據。 –

0

我們在我們的項目,其中在報告表中,我們不得不根據不同的客戶類型隱藏某些列的一個也有類似的要求。

由於我們的報告是使用ajax調用加載的,簡單的show/hide沒有任何意義。因爲即使數據隱藏在html中,或者說你刪除或不在html上渲染這些列,這些值仍然存在於json響應中。

相反,這是你可以做的。

根據用戶類型,你可以有類和這些類必須要展現給用戶的屬性。

例如,你可以用一個基類

public class EmployeeBase 
{ 
    public int Id {get;set;} 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

,然後更具體的人開始。

public class EmployeeAdmin : EmployeeBase 
{ 
    public string Designation {get;set;} 
} 

我的班級名稱可能不合適,但您明白了。

+0

這是一個很好的解決方案,但是在這個解決方案中,如果有幾個類可以像這樣控制,那麼它就可以工作。但考慮一個大型應用程序,其中有數百個模型類,然後您沒有時間創建和維護。我想要一些通用的! –

+0

不可以。這個不是通用的,因爲有人需要根據角色定義數據維度。每個角色一個模型班不應該是一個問題。如果你有100個角色,那麼引入角色組並相應地製作類是明智的。 – Yasser