确定共享布局的安全性

时间:2013-05-13 17:44:47

标签: asp.net-mvc asp.net-mvc-3 security layout

在我的ASP MVC 3网站中,我需要一种方法来确定共享布局页面上的用户安全性。此布局页面包含一个导航栏,需要根据用户的安全级别显示下拉项。

最初我以为我可以进行Ajax调用并填充ViewBag项目,然后使用它来确定要显示/不显示的内容。但是,除非我想在每个控制器/方法中使用相同的方法,否则这将不起作用。

鉴于此设置(位于共享布局上的导航栏),当用户在不同的控制器/方法中导航时,确定要显示哪些项目的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

你可以采取两种方式解决这个问题。

您可以在视图中进行检查:

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

或者您可以构建一个ViewModel并从共享操作中填充它。

示例:

<强>视图模型

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);
    }
}

呈现此操作的部分视图:

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

最后在您看来:

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

答案 1 :(得分:1)

您可以将导航栏实现为PartialView,由ChildAction返回,并使用对ChildAction@Html.Action(...))的调用插入到布局中。

ChildAction中,您可以根据登录用户(User.Identity)实施或不显示内容。

优点是只有一个操作可以返回导航栏,具体取决于经过身份验证的用户,在使用其他控制器及其操作时,您不必担心这些操作。