【问题标题】:Hide navigation bar in master page depend on my user role隐藏母版页中的导航栏取决于我的用户角色
【发布时间】:2012-11-30 20:31:11
【问题描述】:

您好,我在使用 Web 表单时遇到了一个问题,我有一个包含我的导航的母版页,我想问一下我登录后是否有可能,我的导航栏可以根据不同的角色(管理员、学生,工作人员)..

        <asp:ContentPlaceHolder runat="server" ID="FeaturedContent" >
        <nav>
            <ul id="menu" style="text-align:center;">
                <li><a href="~/">Moderator</a></li>
                <li><a href="~/About.aspx">Supervisor</a></li>
                <li><a href="~/Contact.aspx">Student</a></li>
            </ul>
        </nav>
    </asp:ContentPlaceHolder>

所以这是我的站点管理员中的内容占位符示例,我的想法是在我与学生一起登录时隐藏版主和主管,并且我希望使用检查角色“学生”然后版主和主管的站点管理员导航栏可以隐藏来自用户,请给我建议有更好的解决方案,因为这只是我知道..谢谢..

【问题讨论】:

  • 您可以设置一个枚举,并根据用户所属的组或 AccessLevel 在页面加载时设置可见性,我过去曾多次使用 MenuItems 完成此操作..我建议亲自使用 MenuItems 进行此操作
  • 谢谢,我会尝试研究枚举..
  • 我将发布我正在谈论的内容的示例,并且 Page_Load 事件是 MasterPage.cs 的代码所在
  • 你的认证方式是什么?您使用会员服务提供商吗?
  • DJ KRAZE 感谢您的示例,会尝试理解这个概念,BuddhiP,我可以知道如何为我自己的用户表定义会员提供者吗?因为我发现它仅链接到 asp.net 默认 db.users 示例中的用户表。

标签: c# asp.net


【解决方案1】:

对于您的问题,我已将您的 html 代码更改如下

<asp:ContentPlaceHolder runat="server" ID="FeaturedContent" >
        <nav>
            <ul id="menu" style="text-align:center;">
                <li id="li_moderator" runat="server"><a href="~/">Moderator</a></li>
                <li id="li_supervisor" runat="server"><a href="~/About.aspx">Supervisor</a></li>
                <li><a href="~/Contact.aspx">Student</a></li>
            </ul>
        </nav>
    </asp:ContentPlaceHolder>

比在你的服务器端编码后登录验证和权限 学生,您可以隐藏或显示您的菜单。使用以下代码

li_moderator.style.add("display","none")
  li_supervisor.style.add("display","none")

如果你想在其他情况下显示相同的东西而不是使用

  li_moderator.style.add("display","inherit")
  li_supervisor.style.add("display","inherit")

【讨论】:

    【解决方案2】:

    试着提出这个建议:

    <asp:ContentPlaceHolder runat="server" ID="FeaturedContent">
                <nav>
                    <ul id="menu" style="text-align: center;">
                        <li id="menuModerator" runat="server"><a href="~/">Moderator</a></li>
                        <li id="menuSupervisor" runat="server"><a href="~/About.aspx">Supervisor</a></li>
                        <li id="menuStudent" runat="server"><a href="~/Contact.aspx">Student</a></li>
                    </ul>
                </nav>
    </asp:ContentPlaceHolder>
    

    在 Page_Load 内的 Site.Maste.cs 中:

    if (!Page.User.IsInRole("Moderator"))
       {
          menuModerator.Visible = false;
       }
    

    对于域组 Page.User.IsInRole(@"Domain\GroupName")

    【讨论】:

    • 哇,感谢您的解决方案!另一个问题,对不起新手..当我点击另一个页面时(例如:我点击menuStudent然后它链接到Contact.aspx,但是当我尝试点击任何菜单时出现问题,它将我链接到错误的页面,我可以知道任何好的解决方案来替换 ~/Contact.aspx 吗?
    • 如果我的回答有帮助,请将其标记为正确。关于你的第二个问题,抱歉,不知道是什么问题。能改一下吗?
    【解决方案3】:

    我像这样设置我的枚举..

    public enum AccessRights
    {
        LogisticsCoordinator_RW, //Read-Write,
        LogisticsCoordinator_R, //Read only Purchasing and Inventory
        ProcurementManager_RW, // Read-Write access to track purchase of Sand on monitor on hand Inventory
        ProcurementManager_R, //read access to Create Frac Jobs , Dispatch and reroute
        SystemAdministrator, //Full Rights to Vertex_Personnel only
        StudentManagement_R, //Read Access Only 
        AppAdministrator_R,
        NonAdmin,
        None,
        Full,
        Default
    }
    

    现在我使用 LDAP/ActiveDirectory 来确定用户访问权限,您可以使用 SQL Server 或其他一些检查用户权限的方法

    这只是一个代码示例,我不会粘贴整个代码,但你应该明白

     _ADPath = ConfigurationManager.AppSettings["ADPath"];
     _Domain = ConfigurationManager.AppSettings["ISDDomain"];
     _UserId = ((BasePage)Page).CurrentUser;
     string[] strUser = _UserId.Split('\\');
     if (strUser.Length == 2)
     {
         _UserId = strUser[1];
     }
    
     // uxLBLoginError.Text = "";
     try
     {
         LdapAuthentication la = new LdapAuthentication(_ADPath);
    
         if (!AdPassRequired)
         {
             //use this if password not required
             _authenticated = la.IsUserGroupMember(_UserId, AdGroupToPass);
         }
         //else
         //{
         //    // use this if password is required
         //    _authenticated = la.IsAuthenticated(_Domain, _UserId, strPassword);
         //}
         if (_authenticated)
         {
             //test the roles functionality
             ((BasePage)Page).GetDBRoleNames(_UserId);
             Session["User_Initial_Validated"] = true;
             Session["isDefault_Loaded"] = true;
             Session["AccessRights"] = AccessRights.Default;
             Session["UserId"] = _UserId;
             //Response.Redirect("~/Default.aspx");
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 2017-06-24
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多