3

嗨,我在使用网络表单时遇到了一个问题,我有一个包含我的导航的母版页,我想问一下我登录后是否有可能,我的导航栏可以根据不同的角色(管理员、学生、员工)进行自定义)..

        <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>

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

4

3 回答 3

4

对于您的问题,我已更改您的 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")
于 2012-11-30T12:31:11.690 回答
3

尝试建议:

<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")

于 2012-11-30T09:08:39.140 回答
1

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

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");
     }
于 2012-11-30T08:24:11.433 回答