简体   繁体   English

如何使用Bootstrap和ASP.NET根据角色生成菜单?

[英]How to generate menu based on roles using bootstrap and asp.net?

I am trying to hide and display menus based on roles while using bootstrap in asp.net. 我正在尝试在asp.net中使用引导程序时根据角色隐藏和显示菜单。

I am using the navigation menu on the left of this template. 我正在使用此模板左侧的导航菜单。 http://ironsummitmedia.github.io/startbootstrap-sb-admin-2/pages/index.html http://ironsummitmedia.github.io/startbootstrap-sb-admin-2/pages/index.html

Here's an example of my design. 这是我设计的一个例子。

        <!-- /.navbar-top-links -->

        <div class="navbar-default sidebar" role="navigation" >
            <div class="sidebar-nav navbar-collapse">
                <ul class="nav" id="side-menu">

                    <li>
                        <a href="../Home.aspx"><i class="fa fa-pencil-square-o fa-fw"></i> <font color = "000000"><b>Home</b></font></a>
                    </li>

                    <li>
                        <a href="CreateCCF.aspx"><i class="fa fa-pencil-square-o fa-fw"></i> <font color = "000000"><b>Request New </b></font></a>
                    </li>

                    <li>
                        <a href="#"><i class="fa fa-folder-open-o fa-fw"></i> <font color = "000000"> <b>My Requested </b></font><span class="fa arrow"></span></a> 
                        <ul class="nav nav-second-level">                                 
                     <li>
                        <a href="ReqDraft.aspx">Draft</a>
                    </li>
                    <li>
                        <a href="ReqOpen.aspx">Open</a>
                    </li>
                    <li>
                        <a href="ReqClose.aspx">Close</a>
                    </li>

                    <li>
                        <a href="ReqViewAll.aspx">View All</a>
                    </li>

                </ul>

                     <li>
                        <a href="#"><i class="fa fa-pencil-square-o fa-fw"></i> <font color = "000000"><b>For My Approval</b></font><span class="fa arrow"></span></a>
                    <ul class="nav nav-second-level">                                 
                    <li>
                        <a href="PendingApproval.aspx">Pending for Approval</a>
                    </li>
                    <li>
                        <a href="Approved.aspx">Approved</a>
                    </li> 

                    <li>
                        <a href="Rejected.aspx">Rejected</a>
                    </li> 
                </ul>
                    </li>
                </li>

                    <li>
                        <a href="#"><i class="fa fa-folder-open-o fa-fw"></i> <font color = "000000"> <b>For Assignee</b></font><span class="fa arrow"></span></a> 
                        <ul class="nav nav-second-level">                                 
                    <li>
                        <a href="AsgOpen.aspx">Open</a>
                    </li>
                    <li>
                        <a href="AsgClose.aspx">Close</a>
                    </li> 

                    <li>
                        <a href="AsgViewAll.aspx">View All</a>
                    </li> 
                </ul>
                </li>
                 <li>
                        <a href="#"><i class="fa fa-folder-open-o fa-fw"></i> <font color = "000000"> <b>Administration</b></font><span class="fa arrow"></span></a> 
                        <ul class="nav nav-second-level"> 

                    <li>
                        <a href="AllPending.aspx">All Pending Approval</a>
                    </li>

                    <li>
                        <a href="AllClosed.aspx">All Closed </a>
                    </li>
                        </ul>
                </li>

            </div>
            <!-- /.sidebar-collapse -->
        </div>
        <!-- /.navbar-static-side -->
    </nav>

For example, I would like the normal users to have access to 'Request New' and 'My Requested' only. 例如,我希望普通用户只能访问“请求新”和“我的请求”。 And for approvers, they would be able to access 'For My Approval' only. 对于批准者,他们将只能访问“获得我的批准”。

I have tried using this method, however, its not for bootstrap. 我尝试使用此方法,但是,它不适用于引导程序。

public void generateMenu()
    {
        DataTable dt = new DataTable();
        ArrayList parInput = new ArrayList();
        string strMenu = "";
        strMenu = "<table border='1' cellpadding='4' cellspacing='4' width='100%'>";
        parInput.Add("@RoleID");
        parInput.Add(Convert.ToInt32(Session["RoleID"].ToString()));
        parInput.Add("@AppID");
        parInput.Add("2");
        dt = db.ExecSQLQuery(strSQLConn, "master_spGetMenuLink", parInput);

        foreach (DataRow dr in dt.Rows)
        {
            if (dr[1].ToString() == "NA")
            {
                strMenu += " <tr class='MenuLinkHeader'><td>" + dr[0].ToString() + "</td></tr>";
            }
            else
            {
                if (dr[0].ToString() != "Create New")
                { 
                    if (dr[0].ToString() == "Create CCF" && ((Session["SubGroup"].ToString() == "AB") || (Session["SubGroup"].ToString() == "AC")))
                    {
                        strMenu += " <tr class='MenuLink'><td><a href='" + dr[1].ToString() + "'>" + dr[0].ToString() + "</td></tr>";
                    }
                    else
                    {
                        strMenu += " <tr class='MenuLink'><td><a href='" + dr[1].ToString() + "'>" + dr[0].ToString() + "</td></tr>";
                    }
                }
            }
        }

        strMenu += "</table>";
        Response.Write(strMenu);
    }

I suggest, after logging in of the user, check for the role of the user. 我建议在登录用户后,检查用户的角色。 Then, put it on a Session. 然后,将其放在会话中。 (Session["Role"]). (会话[“角色”])。

For every page on Page_Load, make some condition if the Role has the access on a particular page. 对于角色的特定页面具有访问权限,请为Page_Load上的每个页面设置一些条件。 If not, redirect to Home/Default. 如果没有,请重定向到“主页/默认”。

Because hiding a navigation is not pretty much accurate because it can access by typing the url on address page even if its hidden on navigation menu. 因为隐藏导航并不太准确,因为即使隐藏在导航菜单上,也可以通过在地址页上键入url进行访问。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM