我想简要介绍一下我的应用程序的外观。 如果您尚未登录,则会看到主页面,产品/用户/折扣等链接,但当您尝试访问这些链接时,您将被迫登录。
以用户身份登录后,您可以再次看到所有链接,但只能访问“产品”和“折扣”。 如果您以管理员身份登录,则可以访问任何内容。 根据您的角色,我应该使用什么来隐藏这些链接? (未注册/用户/管理员)
我不想在视图中使用逻辑。
为了限制访问我正在使用一个属性,我向Session传递具有role属性的当前UserViewModel。
谢谢!
答案 0 :(得分:1)
您可以根据用户的个人资料制作菜单,传递值。
创建一个HTML.Helper来遍历此项并在View中呈现。
public static MvcHtmlString SideBarItens(this HtmlHelper helper, IDictionary<string, string> model)
{
var stringBuilder = new StringBuilder();
foreach (var item in model)
stringBuilder.Append(string.Format("<li><a href=\"/{0}\">{1}</a></li>", item.Key, item.Value));
return MvcHtmlString.Create(stringBuilder.ToString());
}
为此菜单创建一个具有[ChildActionOnly]
属性的操作,此操作的责任是获取用户的个人资料,并根据该操作获取此配置文件的菜单项,并将此值传递给您局部视图。您可以创建一个Dictionary来传递动作的常用名称以在HTML中呈现,并为该操作赋值。例如:new Dictionary{{"New Products", "Products/New"}}
在您的_Layout或任何默认共享视图中,您可以调用您的ChildAction。
<div class="container-fluid" style="margin-top: 50px;">
<div class="row">
@Html.Action("Menu", "Base")
<div class="col-sm-9 col-md-10 main">
<ol class="breadcrumb" style="margin-top: 20px">
<li><a href="/Home">Home</a></li>
</ol>
@RenderBody()
</div>
</div>
你的行动
[HttpGet, ChildActionOnly]
public ActionResult Menu()
{
//Your logic to fill Dictionary and then returns
return PartialView(dictionary)
}
最后,您在菜单中创建了一个视图,它将您的词典作为模型接收并呼叫您的助手。
@model IDictionary<string, string>
<li>
<ul class="nav-sidebar">
@Html.SideBarItens(Model)
</ul>
</li>
PS:我建议您缓存菜单操作