确定共享布局的安全
问题描述:
在我的ASP MVC 3网站中,我需要一种方法来确定共享布局页面上的用户安全性。此布局页面包含一个导航栏,需要根据用户的安全级别显示下拉项目。确定共享布局的安全
最初我以为我可以做一个Ajax调用并填充一个ViewBag项目,然后用它来确定显示/不显示。但是,除非我想在每个控制器/方法中使用相同的方法,否则这将不起作用。
鉴于此设置(导航栏位于共享布局),当用户在不同的控制器/方法间导航时,确定显示哪些项目的最佳方法是什么?
答
你可以用两种方法解决这个问题。
你可以做视图中的检查:
@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");
}
答
您可以实现您的导航栏作为由ChildAction
使用到ChildAction
(@Html.Action(...)
)的调用返回并插入到布局的PartialView
。
在ChildAction
内,根据登录的用户(User.Identity
)实施要显示或不显示的内容。
优点是只有一个动作可以根据经过验证的用户返回导航栏,并且在使用其他控制器及其动作时不必担心这些。