如何根据ASP.NET中用户的角色动态创建导航栏

时间:2017-01-12 14:38:22

标签: c# asp.net

谷歌搜索了一段时间,但仍然无法获得正确的文章或示例来帮我完成。我目前在基于角色的应用程序上工作(学习),我做得很好。我目前遇到了问题。我在我的sql db中有一个名为SiteMap的表。此表包含以下列(id,Title,Description,Url,roles,parentId,TabType和TabOrder)。我有每列的值。我想要实现的是,当用户登录时,我想根据该用户的角色拥有导航栏。如果用户是访客,我想显示一个具有guest虚拟机角色的导航栏。我怎么样?

这是db的样子

id标题说明网址角色parentId TabType TabOrder

1 ROOT ROOT * NULL 0 0

2管理员Padmin PortalAdmin#Admin 1 1 2

3报告报告#Admin 1 1 3

4票务门票#Admin; Guest 1 1 4

5 ManageTicket Mticket.aspx Guest 4 4 2

这里是我想要做的总结。当具有guest用户角色的用户登录时,只有Ticket(具有子菜单Manage Ticket)应该在导航栏中。如果具有Admin角色的用户,则应在导航栏中显示Portal Administration,Report,Ticket(带子菜单Manage Ticket)。我希望你明白我解释的内容。感谢

2 个答案:

答案 0 :(得分:1)

为HomeController上的Navbar做一个专门的操作。该操作应确定用户的类型,并将其转换为视图模型。像这样的东西(伴随着视图模型类)

    public ActionResult Navbar()
    {
        var model = new NavbarViewModel()
        {
            Administrator = User.IsInRole("Admin"),
            Reporting = User.IsInRole("Reporting")
        };
        return PartialView(model);
    }

    public class NavbarViewModel
    {
        public bool Administrator { get; set; }
        public bool Reporting { get; set; }
    }

将_Layout.cshtml中的导航栏根div复制到Navbar视图中,并将其替换为_Layout.cshtml中的:

           @{Html.RenderAction("Navbar","Home");}

使用标准剃刀渲染导航栏元素。

    <div class="navbar-collapse collapse">
        <ul class="nav navbar-nav">
            <li>@Html.ActionLink("Home", "Index", "Home")</li>
            <li>@Html.ActionLink("About", "About", "Home")</li>
            <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
            @if (Model.Administrator)
            {
                <li>ADMINISTRATOR LINK</li>
            }
            @if (Model.Reporting)
            {
                <li>REPORTING LINK</li>
            }
        </ul>
        @Html.Partial("_LoginPartial")
    </div>

答案 1 :(得分:0)

我无法直接回答你的问题,但我希望这能指出你正确的方向。假设您已经或将要创建一个Users表,其中包含一个可以容纳用户角色的列(本质上是权限级别),我会让您查询单个用户登录时的角色并显示与该用户相关联的导航栏角色。在登录验证过程中,当您检查用户是否存在并且具有正确的凭据时,我将检索其&#34;角色&#34;或权限级别并将其存储在会话数据中。然后使用该存储的项目来查询&#34; SiteMap&#34;用户&#34;权限&#34;的导航栏表或者&#34;角色&#34;就像导航栏角色一样。检索完毕后,您需要做的就是在页面上显示它。

如果是访问该页面的访客,您可以将访客导航栏设置为默认值,只有在用户实际登录后才会更改。

您可以对用户权限进行一些研究,并在登录时存储会话数据。

我真的希望这会有所帮助。如果不查看您的代码,我就无法做更多事情来了解最新情况。