最近在做一个项目时遇到了一个问题..在做身份授权验证时 想用Form验证来验证两个授权...分别是后台管理员授权和前台会员授权...但是在配置时才发现这样会报错... 在根目录的web.config
               <authentication mode="Forms">
<forms  loginUrl="/login/login.aspx" name=".ASPXFORMSAUTH"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
在 admin 下的web.config
                 <authentication mode="Forms">
<forms  loginUrl="/admin/login.aspx" name=".ASPXFORADMIN"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
这样会报错...哪位高手有解决的方法啊..  其实就是要实现一个form验证 实现登陆到两个不同的登陆页面 去授权...如果有其他的解决办法期待你们提出来...在线等...大家在做授权的时候是怎么做的 请给出具体办法!!!

解决方案 »

  1.   

    另外:
      用角色验证。。配置webconfig文件即可   
      首先设计好网站的用户的角色共有多少种,能进行的操作是什么,也就是把各个模块分配到不同的角色中。。   
      如超级管理员,系统管理员,资料更新员,新闻管理员等等,然后配置webconfig文件里的目录即可   
      至于用户权限的管理,数据库中为用户加个roles字段。登录时加入即可。。   
      不过这样设计时要考虑的一个重点问题是,一个页面最好是一个独立的功能模块,不与角色验证相关,而通过webconfig来配置
      

  2.   


    谢谢你认真的回答...
    角色已经搞定了... 现在主要问题是 登陆!  一个是管理员登陆,前台还有会员登陆...
    我想用一个form搞定...  怎么给他们分别授权!???
      

  3.   

    两个路径有一个没写对吧??
    我好久没做asp.net了  
    试试吧
      

  4.   

    建议楼主在/login/login.aspx页面登录按钮事件中,获取当前用户角色,普通用户和管理员分别重定向页面。管理员重定向到admin/login.aspx。
    if (Roles.IsUserInRole("admin"))
            {
                Response.Redirect("~/admin/login.aspx");
            }
      

  5.   

    authentication只能在web应用程序级配置,删掉admin 下的web.config 中的authentication配置。你可以在/login/login.aspx文件的Page_Load事件中加上下面的判断:protected void Page_Load(object sender, EventArgs e)
    {
    if (Request["ReturnUrl"] != null && Request["ReturnUrl"].Contains("/admin/"))
    Server.Transfer("~/admin/login.aspx");
    }
    这样如果访问的是admin目录下的页面,都会转到admin目录下的login去登陆。如果前台会员和后台管理员的权限是完全独立的,就是说不管前台会员是否已经登陆,进入后台管理时都需要再次登陆,则可以考虑分别用两种机制实现权限管理,比如前台会员用session方式保存用户登录信息,后台用forms验证。此外还可以考虑把admin分开做成子项目(如果你的虚拟主机允许配置两个web应用的话)
      

  6.   


    在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误。这个错...
      

  7.   

    谢谢的你回答...  你的方法可行...现在我的 admin 后台管理文件夹里是后台管理文件 和前台在在一个web项目下如果我要单在一个独立的二级域名下  改怎么改...怎么做权限呢... 
     
    不会项目整个文件都要动吧
      

  8.   

    你写的不对哦,应该在<location><system.web>内吧?
      

  9.   

    看你的admin和前台是否有互相引用关系,如果两个都是完全独立的,你只需要新建一个web应用,把admin复制进去就可以了。建立虚拟目录的时候,再多建一个,指向admin目录(或者是把admin应用上传发布到这个虚拟目录下)
      

  10.   

    那就再配置一个web.config啊,这个文件的权限不是族层覆盖的吗
      

  11.   


    是覆盖...但是貌似这个<authentication mode="Forms">  节点只能有一个...我是在<system.web>里配置的
      

  12.   

    你要真想区分不同角色的权限你可以用vs2005上的网站配置管理
    里边可以新建角色,可以向角色里添加用户,每个角色都可以设置不同的目录访问权限(可以是多种组合),每个用户也可能属于不同的几种权限,然后严正时,判断rolse.isinrole()就可以了,可以取identity进行比较
      

  13.   

    记住:
    authentication 节只能在网站的根目录下的web.config中应用
    不能在下面的子目录,譬如你的admin下配置,这是不允许的,否则会报错.但<authorization>可以在子目录下配置.
      

  14.   

     <!-- 权限设置 A用户 登录后 可访问的资源 -->
      <location path="admin" ><!-- 访问的资源路径 -->
        <system.web>
          <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN"/>
            <authorization>
              <deny users="?"/>
          <allow roles="A"/></authorization>
        </system.web>
      </location>
     <!-- 权限设置 B用户 登录后 可访问的资源 -->
      <location path="user" ><!-- 访问的资源路径 -->
        <system.web>
          <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN"/>
            <authorization>
              <deny users="?"/>
          <allow roles="B"/></authorization>
        </system.web>
      </location>