2013-09-30 91 views
0

這個問題看起來很簡單...我敢肯定有成千上萬的人已經知道了這一點,所以也許我正在過度揣測它。如何根據用戶的權限級別在導航欄中隱藏或顯示鏈接?我正在使用自定義角色(而不是MVC)並將該信息存儲在數據庫中。我想要的效果是非常簡單的根據MVC中的權限顯示特定的鏈接

_Layout.cshtml

... 

@if(user.IsAdmin) 
    show link 
... 

有幾種解決方案,這個我已經在網絡上發現這裏如此,但大多數人似乎違反了MVC結構。

我發現的大多數解決方案都涉及從視圖中探測數據,我敢肯定這是不好的做法。其他解決方案涉及利用視圖內的會話變量來決定顯示的內容和不顯示的內容。這是不是也違背了最佳實踐,因爲視圖不應該能夠決定內容?

我能想到的唯一的「純MVC」方式是將IsAdmin的值納入我的每個視圖模型中,這似乎比它的價值更麻煩。我想也可以創建一個javacript解決方案,在這裏我使用AJAX來確定管理狀態,然後讓它注入一個html元素到我的導航欄中。

處理這個問題的正確方法是什麼?我只是誤解了最佳做法?

+0

你有沒有考慮使用mvcsitemap提供程序? –

+0

我不知道這樣的服務。將讀入它.. – Jeff

+1

爲什麼不'@if(User.IsInRole(「Admin」))...'?這似乎是這樣做的標準方式,即使它不是最「純粹」的。 –

回答

0

也許在佈局中使用局部視圖?事情是這樣的:

@Html.Partial(actionName: "NavigationLinks", controllerName: "Navigation") 

這樣的話,你可以保存MVC約定:視圖,可以單機,和導航控制器注入模型(無論是從會話數據,或其它地方)。