代码改变世界

Form 验证扩展:如何让 Form 验证支持 多个登录窗口?

2005-11-11 03:24  晓风残月  阅读(...)  评论(... 编辑 收藏

目前正在着手一个网站(人才网型),准备用form验证,但是这个网站有一个会员区,而且还需要区分个人用户和企业用户,同时还有后台管理管理,因此我就准备了三个登录页面,因为三个用户,对应着三个不一样的表,一个登录页面,我没办法判断待验证的用户是什么类型的用户。form验证可以支持多个登录窗体吗?比如,我的站点下有admin目录和company目录,而且各自包含了login。aspx页面,我希望未授权用户访问admin和company目录,分别自动跳转到相应的login。aspx?但是我们的loginaspx页面只能在站点根目录(虚拟目录级别)设置啊,二级目录的webconfig是不能设置的,

  <authentication mode="Forms">
         
<forms name="myaspnet" loginUrl="login.aspx" protection="All" timeout="20" />        
    
</authentication>

那么,很多朋友就会说了,登录页上提供几个单选按钮不就行了吗?但是,我是不希望 管理员 这个路口被公开的。

认真想了一下,觉得form验证是基于角色验证,因此,假如增加一张User表,存储登录信息,其余的 admin 、hunter、company都与User产生一对一的联系(不知道能不能叫一对一),分别存储各自的详细信息(从面向对象的角度看,有点继承的问道,毕竟 admin,hunter,company都是网站的用户,PS:OO不是很熟悉)。登录的时候,都去读取User信息,同时Role表中内置 Admin ,hunter, company 角色(当然可以扩展),然后各自的目录下的webconfig:
admin目录:

 <system.web>

    
<authorization>
        
<allow roles="Admin" />             <deny users="*" />
    
</authorization>

    
</system.web>

company目录
    <system.web>

    
<authorization>
        
<allow users="*" />                </authorization>

<location path="page.aspx">
  
<authorization>
        
<allow roles="Company" />            <deny users="?" />
    
</authorization>
</location>


    
</system.web>
hunter目录
    <system.web>

    
<authorization>
        
<allow users="*" />                </authorization>

<location path="page.aspx">
  
<authorization>
        
<allow roles="Hunter" />            <deny users="?" />
    
</authorization>
</location>


    
</system.web>

关系图:


这样的设计,应该比较符合OO的思想,但是,多以一张表出来,就意味着查询要链接表,更新、删除要级联,又增加了数据维护的复杂度,总觉得怪怪的.