asp.net-mvc-4 – 基于角色的导航

我一直在尝试为我正在开发的项目创建一个基于动态角色的导航解决方案.

导航应仅显示用户角色相关的链接,例如:管理员将具有查看应用程序统计信息,管理客户帐户等的链接,而标准用户将拥有管理其帐户的链接,与朋友交流等等..

我目前有一个名为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

有没有办法让这个逻辑退出视图并让Controller处理这个?

解决方法

正如所建议的那样,我创建了一个名为Menu的ChildAction和每个角色的部分视图.在操作中,我使用一些条件语句进行角色检查并渲染适当的视图.

这使条件语句保持在视图之外,从而使其成为更清晰的解决方案.

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

这是我使用的解决方案.

在我希望菜单出现的布局视图中,我使用了它.

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

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

public class NavigationController : Controller
{

    [ChildActionOnly]
    public ActionResult Menu()
    {
        if (Roles.IsUserInRole("Administrator"))
        {
            return PartialView("_NavigationAdmin");

        }

        return PartialView("_NavigationPublic");
    }

}

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....