基于角色导航



我一直在尝试为我正在从事的项目创建基于动态角色的导航解决方案。

导航应该只显示与用户角色相关的链接,例如:管理员将拥有查看应用程序统计信息、管理客户帐户等链接…而标准用户将有链接来管理他们的帐户,与朋友交流等。

我目前有一个名为Navigation的部分视图,其中有一些用于角色检查的基本条件语句和用于显示适当链接的标记组合。这是有效的,但是,我知道它很快就会变得难以管理。

导航部分视图:

@if(User.IsInRole("Admin")) {
    <li><a href="#">Statistics</a></li>
    <li><a href="#">Accounts</a></li>
    <li><a href="#">Dashboard</a></li>
} 
@if(User.IsInRole("User")) {
    <li><a href="#">Account</a></li>
    <li><a href="#">Friends</a></li>
}
// code omitted

是否有一种方法可以将此逻辑从视图中取出并让控制器处理此问题?

SOLUTION

如建议的那样,我为每个角色创建了一个名为Menu的ChildAction和部分视图。在动作内部,我使用一些条件语句进行一些角色检查,并呈现适当的视图。

将条件语句排除在视图之外,使其成为一个更简洁的解决方案。

我相信有一些事情可以做来整理它,我会继续努力改进它。

这是我使用的解决方案。

在我想显示菜单的布局视图中,我使用了这个。

@Html.Action("Menu", "Navigation")

然后我创建了一个名为Navigation的控制器,并添加了一个名为Menu的动作。

public class NavigationController : Controller
{
    [ChildActionOnly]
    public ActionResult Menu()
    {
        if (Roles.IsUserInRole("Administrator"))
        {
            return PartialView("_NavigationAdmin");
        }
        return PartialView("_NavigationPublic");
    }
}

最新更新