in your code, check the 用户权限, <uc;Control1 id=con1 runat=server />if (用户权限 is good)
  con1.Visible = true;
else
  con1.Visible = false;
or
if (用户权限 is good)
  form1.Controls.Add(LoadControl(good.ascx"));
else
  form1.Controls.Add(LoadControl("bad.ascx"));also see
Role-based Security with Forms Authentication
http://www.codeproject.com/aspnet/formsroleauth.asp

解决方案 »

  1.   

    //判断权限
    //加载控件
    Control purView = LoadControl("purView.ascx");
    purView …
      

  2.   

    把控件放在panel里也可以!根据权限控制panel的显示和隐藏就行了
      

  3.   

    我没有说清楚,.ascx已经放在html中了,现在要根据权限的大小,动态隐藏ascx中的一些菜单,所有的用户都会进入saucer(思归) 提到的form1.Controls.Add(LoadControl(good.ascx"));中的form1,并且都加载了good.ascx,只是goog.ascx相应的显示或多或少(主要是菜单,菜单是预定义好的)
      

  4.   

    根据用户权限来动态生成链接菜单:if(Request.IsAuthenticated){
    if(User.IsInRole("Admin")){
    //在这里为角色Admin创建链接菜单
    }
    else if(User.IsInRole("Guest")){
    //在这里为角色Guest创建链接菜单
    }
    }
    ---------------------------
    http://www.webdiyer.com
      

  5.   

    to webdiyer(陕北吴旗娃),能否在if(Request.IsAuthenticated){
    if(User.IsInRole("Admin")){
    //在这里为角色Admin创建链接菜单
    }
    else if(User.IsInRole("Guest")){
    //在这里为角色Guest创建链接菜单
    }
    }
    中给一个创建链接菜单的示例?谢谢!
      

  6.   

    将功能(链接)放在不同的文件中
    根据用户权限的不同,加载相应的文件到ascx
    这样你只需要修改相应的文件就可以配置用户的权限了
      

  7.   

    to asam2183(三山) ,假如我有5个大模块,分5个菜单,每个菜单下有3-5个子菜单,那么根据用户权限的不同,假定第一模块有5个子菜单,第二个有3个,第三个有4个,第四个有2个,第5个有5个子菜单,那么可以组合为C(5,1)*C(5,2)*C(5,3)*C(5,4)*C(5,5)*C(3,1)*C(3,2)*C(3,3)*C(4,1)*C(4,2)*C(4,3)*C(4,4)*C(2,1)*C(2,2)=5*5*4/2*5*4*3/3*5*1*1*3*3*4*4*3/2*4*........=?,这样做怎么可能呢?可能我对你答案理解有误
      

  8.   

    我想你误解了,每个用户类型对应一个文件
    而这个文件中的"内容"应该包括该用户所有的功能(链接)
    如:
    guest文件
    <模块1>
       <链接1/>
       <链接2/>
    </模块1>
    <模块2>
       <链接5/>
       <链接6/>
    </模块2>
      

  9.   

    然后只要你在相应模块调用相应<模块>里面的内容就够了在理论上,这个文件可以配置得很丰富,可以实现放信息
      

  10.   

    那你可以在ASC设置几个属性用来显示或者隐藏菜单//这里是一个Button,当然也可以换成Table
    <asp:imagebutton id="IndexButton" runat="server" CausesValidation="False" ImageUrl="../images/Ni_Navigation_List.gif"></asp:imagebutton>public void IsDisplayList( bool _IsDisplayList )
    {
    IndexButton.Visible = _IsDisplayList;
    }然后根据需要隐藏或者显示菜单.
      

  11.   

    也可以这样:<table>
    <tbody id="purView" style="DISPLAY: none" runat="server">
    <tr>
    <td></td>
    <td></td>
    </tr>

    </tbody>
    </table>public void IsDisplay( bool isDisplay )
    {
    if ( isDisplay )
    {
    purView.Style["display"] = "block";
    }
    else
    {
    purView.Style["display"] = "none";
    }
    }
      

  12.   

    按asam2183(三山)的思路自己在研究一下
    其实我的ascx中的链接和asam2183(三山)的差不多<DIV id="Layer2" onmouseover="MM_showHideLayers('Layer2','','show')" style="LEFT: 187px; VISIBILITY: hidden; WIDTH: 120px; POSITION: absolute; TOP: 130; HEIGHT: 83px"
    onmouseout="MM_showHideLayers('Layer2','','hide')">
    <TABLE class="trans2" height="47" cellSpacing="1" cellPadding="0" width="20%" border="0">
    <TR>
    <TD width="120">
    <TABLE class="11t" style="WIDTH: 90px; HEIGHT: 16px" borderColor="#fffedf" cellSpacing="1"
    cellPadding="1" width="90" align="center" bgColor="#8F8EBB" border="0">
    <TR>
    <TD vAlign="bottom" bgColor="#5B5993" height="18"><FONT face="Arial, Helvetica, sans-serif"><a href='/customeradmin/frmTeleUserSearch.aspx' class='topmnu'>AA管理</a></FONT></TD>
    </TR>
    <TR>
    <TD vAlign="bottom" bgColor="#5B5993" height="18"><FONT face="Arial, Helvetica, sans-serif"><a href='/customeradmin/frmAdUserSearch.aspx' class='topmnu'>BB管理</a></FONT></TD>
    </TR>
    <TR>
    <TD vAlign="bottom" bgColor="#5B5993" height="18"><FONT face="Arial, Helvetica, sans-serif"><a href='/customeradmin/frmAgent.aspx' class='topmnu'>CC管理</a></FONT></TD>
    </TR>
    </TABLE>
    </TD>
    </TR>
    </TABLE>
    </DIV>
    <table height='30' border='0' align="center" cellpadding='0' cellspacing='0'
    background='/images/bg_grid.gif'>
    <tr>
    <td height='30'>
    <table align="center" border='0' cellspacing='0' cellpadding='0' background='/images/bg_grid.gif'>
    <tr>
    <td width="80%" style='BACKGROUND-IMAGE: url(/images/top_01.gif);BACKGROUND-REPEAT: repeat-x'>
    <table border='0' cellpadding='0' cellspacing='0' background='/images/top_07.gif'>
    <tr>
    <td><img src='/images/top_10_short.gif'></td>
    <td><img src='/images/spacer.gif' width='8' height='1'></td>
    <td nowrap style='FILTER: DropShadow(Color=#444444, OffX=1, OffY=1, Positive=1)'><a href='default.aspx' class='topmnu'>首页</a></td>
    <td><img src='/images/spacer.gif' width='8' height='1'></td>
    <td><img src='/images/top_02.gif'></td>
    <td><img src='/images/spacer.gif' width='8' height='1'></td>
    <td nowrap style='FILTER: DropShadow(Color=#444444, OffX=1, OffY=1, Positive=1)'><font color="#ffffff"><a href='/Welcome.aspx' class='topmnu' onMouseOver="MM_showHideLayers('Layer1','','show')" onmouseout="MM_swapImgRestore();MM_showHideLayers('Layer1','','hide')">XX管理</a></font>
    </tr>
    </table>
    </td>

    </tr>
    </table>
    </td>
    </tr>
    </table>
    function MM_showHideLayers() {   var i,p,v,obj,args=MM_showHideLayers.arguments;
      for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
        if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
        obj.visibility=v; }
    }
      

  13.   

    一个动态生成菜单的简单示例,自己可以动动脑筋完善一下:menu.aspx
    ----------------------------------------
    <script runat="server" Language="C#">
    void CreateMenu(object src,EventArgs e){
    NavMenu[] menus=new NavMenu[15];
    menus[0]=new NavMenu("admin","菜单1-1","admin-1.aspx");
    menus[1]=new NavMenu("admin,guest","菜单1-2","admin-2.aspx");
    menus[2]=new NavMenu("admin","菜单1-3","page3.aspx");
    menus[3]=new NavMenu("guest","菜单2-1","guestpage1.aspx");
    menus[4]=new NavMenu("guest,admin,webdiyer","菜单2-2","guest2.aspx");
    menus[5]=new NavMenu("admin","菜单2-3","test1.aspx");
    menus[6]=new NavMenu("webdiyer","菜单3-1","newpage1.aspx");
    menus[7]=new NavMenu("admin,webdiyer","菜单3-2","mypage.aspx");
    menus[8]=new NavMenu("guest,webdiyer","菜单3-3","where.aspx");
    menus[9]=new NavMenu("webdiyer","菜单4-1","good.aspx");
    menus[10]=new NavMenu("webdiyer","菜单4-2","http://www.webdiyer.com");
    menus[11]=new NavMenu("admin,webdiyer","菜单4-3","mypage3.aspx");
    menus[12]=new NavMenu("guest,admin,webdiyer","菜单4-4","wheretogo.aspx");
    menus[13]=new NavMenu("webdiyer,admin","菜单5-1","http://www.sina.com.cn");
    menus[14]=new NavMenu("webdiyer,guest","菜单5-2","http://www.webdiyer.com");string role=ddl.SelectedItem.Text;
    for(int i=0;i<menus.Length;i++){
    if(Array.IndexOf(menus[i].UserRole.Split(','),role)>=0){
    HyperLink link=new HyperLink();
    link.Text=menus[i].Name;
    link.NavigateUrl=menus[i].Url;
    menupnl.Controls.Add(link);
    menupnl.Controls.Add(new LiteralControl("&nbsp;|&nbsp;"));
    }
    }
    }public class NavMenu{
    public string UserRole;
    public string Name;
    public string Url;public NavMenu(string _userRole,string _name,string _url){
    UserRole=_userRole;
    Name=_name;
    Url=_url;
    }
    }
    </script>
    <HTML>
    <HEAD>
    <TITLE> Webdiyer 制造:) (www.webdiyer.com) </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="Webdiyer">
    </HEAD><BODY>
    <form runat="server">
    <asp:DropDownList runat="server" id="ddl">
    <asp:ListItem>admin</asp:ListItem>
    <asp:ListItem>guest</asp:ListItem>
    <asp:ListItem>webdiyer</asp:ListItem>
    </asp:DropDownList>
    <asp:Button runat="server" id="btn" Text="生成菜单" onclick="CreateMenu"/><p>
    <asp:Panel runat="server" id="menupnl"/>
    </form>
    </BODY>
    </HTML>
      

  14.   

    用户控件加一个public变量接收主业面中传过来的登陆用户的id,根据这个id来动态生成用户控件中的菜单。