2013-05-13 73 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)实施要显示或不显示的内容。

优点是只有一个动作可以根据经过验证的用户返回导航栏,并且在使用其他控制器及其动作时不必担心这些。