手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

使用更精简的代码保证ASP.NET应用程序的安全

来源:互联网 作者:west263.com 时间:2008-02-22
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

图 16:“RoleGroup Collection Editor”(角色组集合编辑器)要求手动输入角色。您也可以为角色编组,这样多个组可以共享同样的模板界面。

在“Design”(设计)视图中,LoginView 控件现在将角色列表显示为模板选项:

图 17:“HTML”视图将更新,显示您为每个角色所设计的所有模板。

从以下 HTML 源文件中可以看出,“Admin”(管理)和“Member”(成员)角色使用了新的内容模板。在验证以前仍将使用 <anonymoustemplate>,但验证以后,将使用与某个用户角色匹配的第一个模板。如果未找到匹配项,默认使用 <loggedintemplate> 设置。

<asp:loginview id="lvMenu" runat="server">

    <anonymoustemplate>

        <asp:loginstatus id="anonLoginStatus" runat="server">

        </asp:loginstatus>

    </anonymoustemplate>

    <rolegroups>

        <asp:rolegroup roles="Admin">

            <contenttemplate>

    <tr>

       <td class="OtherTabs">

        <asp:hyperlink id="adminHome" runat="server"

          navigateurl="~/default.aspx">Home</asp:hyperlink>

            &nbsp;|&nbsp;</td>

        <td class="OtherTabs">

         <asp:hyperlink id="adminAbout" runat="server"

           navigateurl="~/about.aspx">About</asp:hyperlink>

             &nbsp;|&nbsp;</td>

        <td class="OtherTabs">

        <asp:hyperlink id="adminAdmin" runat="server"

          navigateurl="~/admin/manageMembers.aspx">Admin

            </asp:hyperlink>&nbsp;|&nbsp;</td>

        <td class="OtherTabs">

        <asp:loginstatus id="adminLoginStatus" runat="server">

        </asp:loginstatus>

        </td>

    </tr>

            </contenttemplate>

        </asp:rolegroup>

        <asp:rolegroup roles="Member">

            <contenttemplate>

    <tr>

       <td class="OtherTabs">

        <asp:hyperlink id="memberHome" runat="server" 

          navigateurl="~/default.aspx">Home</asp:hyperlink>

            &nbsp;|&nbsp;</td>

        <td class="OtherTabs">

         <asp:hyperlink id="memberAbout" runat="server" 

           navigateurl="~/about.aspx">About</asp:hyperlink>

             &nbsp;|&nbsp;</td>

        <td class="OtherTabs">

        <asp:loginstatus id="memberLoginStatus" runat="server">

        </asp:loginstatus>

        </td>

    </tr>

            </contenttemplate>

        </asp:rolegroup>

    </rolegroups>

    <loggedintemplate>

    <tr>

       <td class="OtherTabs">

        <asp:hyperlink id="authHome" runat="server" 

          navigateurl="~/default.aspx">Home</asp:hyperlink>

            &nbsp;|&nbsp;</td>

        <td class="OtherTabs">

         <asp:hyperlink id="authAbout" runat="server" 

           navigateurl="~/about.aspx">About</asp:hyperlink>

             &nbsp;|&nbsp;</td>

        <td class="OtherTabs">

        <asp:loginstatus id="authLoginStatus" runat="server">

        </asp:loginstatus>

        </td>

    </tr>

    </loggedintemplate>

</asp:loginview>

将按照显示的顺序分析这些模板,并将第一个匹配的角色用作该登录控件的内容。这意味着必须仔细地为角色安排适当的顺序。我的示例程序的结果是将新的“Admin”(管理)菜单项限制为只对分配了管理角色的用户显示。

我们还可以指定 <authorization> 规则拒绝或允许特定的角色,从而实现使用角色来控制对其他资源的访问。可以使用 <location> 标记在 web.config 文件的应用程序级别实现这一点,或是将 web.config 文件添加到受保护的子目录。我在示例程序的 /admin 目录下放置了以下 <authorization> 设置,只允许那些指定为管理角色的用户访问:

           <authorization>

               <allow roles="Admin" />

               <deny users="*" />

            </authorization>

现在,可以创建一些管理页面来管理成员,并根据 ASP.NET Whidbey 提供的成员身份 API 来编写代码。

成员身份和角色提供程序

至此,我所显示的大多数内容都是基于使用新的安全控件。但是,有一些基础组件允许我们直接管理用户和角色。这些组件提供了从数据库访问层抽象而来的层。为了进行演示,我将在 /admin 目录下创建一个新的内容页面 (manageMembers.aspx)。该页面将显示电子通讯成员的列表,并提供了一个中心界面,用于添加、编辑或删除电子通讯成员。

我将“DataView”(数据视图)控件拖放到页面中,目的是使用用户列表填充此控件。Page_Load 事件包含了利用内部成员身份对象检索所有用户的代码。新的 Membership 类的方法和属性提供了对默认创建的成员身份数据库的直接访问。例如,

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!