2014-01-29 47 views
5

在我的ASP.NET MVC網站中,我的設置允許用戶擁有角色和角色的權限。通常,這些權限是爲控制器設置的。在我的網站的主導航菜單中,經過身份驗證的用戶可以看到所有項目,即使他們未被授權訪問該頁面。從視圖訪問用戶權限的最佳方式

目前我只能配置基於關閉菜單,如果用戶進行身份驗證:

@if (Request.IsAuthenticated){ } 

我想知道,什麼是對用戶的權限傳遞給視圖的最佳方式,僅用於配置的緣故該用戶的菜單?有沒有一些常見的做法,或者我將不得不自己實現這一點?我沒有找到關於它的很多信息,但也許我使用了錯誤的搜索條件。

感謝您的任何建議。

編輯

對不起,我可能不會有足夠清晰。這是我的主菜單,位於_Layout頁面。此外,分配給角色的權限可以由管理員非常配置(他們也可以創建和刪除角色),因此檢查用戶是否在角色中將不能滿足我的需求。

回答

3

您可以創建在說,一個動作,CommonController,返回包含您的導航的局部視圖。這部分視圖可以有自己的模型,可以從控制器填充。這允許您使用依賴注入。

動作看起來是這樣的:

[ChildActionOnly] 
public ActionResult Navigation() 
{ 
    var model = new NavigationModel(); 
    // populate the model.. 

    return PartialView("_Navigation", model); 
} 

可以渲染這個部分在您的視圖(_Layout.cshtml你的情況)是這樣的:

@Html.Action("Navigation", "Common") 

在大多數情況下,Request.IsAuthenticated就好了。只有在需要更高級的東西時才使用它。

+0

好主意!剛剛實施它,它完美的作品。非常感謝。 – Jonesopolis

0

最好的辦法是在視圖使用的視圖模型上有一個屬性。

+0

以及我的導航菜單是在我的佈局 - 所有意見使用它 – Jonesopolis

+0

然後我會說,Request.IsAuthenticated是好的 –

1

您可以使用Roles類的靜態方法IsUserInRole

@if (Roles.IsUserInRole("Admin")) 
{ 
    // ... 
} 
相關問題