2013-05-13 47 views
0

在我的ASP MVC 3網站中,我需要一種方法來確定共享佈局頁面上的用戶安全性。此佈局頁面包含一個導航欄,需要根據用戶的安全級別顯示下拉項目。確定共享佈局的安全

最初我以爲我可以做一個Ajax調用並填充一個ViewBag項目,然後用它來確定顯示/不顯示。但是,除非我想在每個控制器/方法中使用相同的方法,否則這將不起作用。

鑑於此設置(導航欄位於共享佈局),當用戶在不同的控制器/方法間導航時,確定顯示哪些項目的最佳方法是什麼?

回答

1

你可以用兩種方法解決這個問題。

你可以做視圖中的檢查:

@if (User.Identity.IsAuthenticated){ 
    // show logged in view 
} 
else{ 
    // show logged out view 
} 

或者你可以建立一個視圖模型並填充,從一個共同行動。

實施例:

視圖模型

public class VM 
{ 
    public string Text{get; set;} 
} 

共同行動上共享控制器:

public class SharedController{ 
    public PartialViewResult GetMenu(){ 
     VM newvm = new VM(Text = "not logged in"); 
     if (User.Identity.IsAuthenticated){ 
      newvm.Text = "logged in"; 
     } 
     return PartialView("Shared", newvm); 
    } 
} 

甲partialview呈現此動作:

@Model VM 
<p> 
    @model.Text 
</p> 

並且最後在你看來:

@{ 
    Html.RenderAction("Shared", "Shared"); 
} 
1

您可以實現您的導航欄作爲由ChildAction使用到ChildAction@Html.Action(...))的調用返回並插入到佈局的PartialView

ChildAction內,根據登錄的用戶(User.Identity)實施要顯示或不顯示的內容。

優點是隻有一個動作可以根據經過驗證的用戶返回導航欄,並且在使用其他控制器及其動作時不必擔心這些。