membership(5)----实战篇

来源:互联网 发布:淘宝66大促是什么活动 编辑:程序博客网 时间:2024/04/30 09:19

一、概述

        前面四篇讲解了membership的理论,注册,配置与常用API,重在理论,这一篇将一个比较完整的例子来体现membership的功能。本例子功能说明如下:

1.例子有两类角色:管理员,教师。

2.有几个页面,其中登录页面是所以访问者都能看到的,首页是登录用户都可以看到的,管理员页面是管理员才能看到的,教师页面是教师才能看到的,体现的了membership基于角色的访问控制。其中登录页面使用集成了Membership的登录控件,体现membersip的身份验证能力。

二、实践内容

1.打开vs 2010,新建一个Asp.net空网站,存储在文件系统中,然后将其放入IIS中,当然如果没有配置IIS,也可以不放,在Web.config中同样可以配置。

2.按照注册篇的内容,将membership注册进oracle数据库当中,并在网站的asp.net配置工具当中配置提供程序为注册的oracle提供程序,并在安全选项中建立两个用户(首先确保验证方式为FORM验证),一个是:aaa/abc@123,一个是:bbb/abc@123,继续建立两个角色:管理员,教师,然后将管理员分配给aaa,教师角色分配bbb。在IIS中配置好连接字符串(在Web.config中同样可以配置)。这一步我说的很简略,比如创建用户和角色也可以在程序中或者数据库中创建,这里选择了最简单的方式。这里没有讲到的内容注册篇和配置篇都已经详细的讲过了,如果有不懂的,可以参考前面的内容。

3.配置好SitemapProvider,具体可参考配置篇中的关于SiteMap的番外篇。

4.建立一个登陆页面名为Login.aspx,向里面添加login控件。login控件位于工具箱--->登录选项下面。在属性栏将其MembershipProvider设置为你的成员资格提供程序OracleMembershipProvider。

5.建立一个首页面名为Default.aspx,依次向里面添加:loginview,loginstatus,loginname,label,ASPxSplitter,Treeview,SitemapDataSource控件,布局如图所示:


图5.1首页面

控件的名字我都在旁边用红色标注出来了。需要注意的是,treeview和sitemapdatasource都放在了ASPxSplitter控件左边面板里。ASPxSplitter控件属于Dev Express新控件,如果没有安装新控件组件,则去掉该控件即可,将treeView和sitemapdatasource直接放在第一行下面就行了。

        然后是对上面的控件进行属性设置:

        loginview的设置如下:

<asp:LoginView ID="LoginView_main" runat="server">        <AnonymousTemplate>            请登录!        </AnonymousTemplate>        <LoggedInTemplate>              欢迎!          </LoggedInTemplate>   </asp:LoginView>
loginstatus的设置如下:

 <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutPageUrl="~/Login.aspx" />
loginname无需设置,label设置ID=lb_role。

treeView设置数据源为我们添加的sitemapdatasource,如图所示:


图5.2treeView数据源

此外在treeView的属性中添加:Target="contentUrlPaneArea",这个对应于ASPxSpllitter中的第二个splitterpane的ContentUrlIFrameName,如图所示:


图5.3ASPxSplitter属性

这表示点击treeview的结点后,将请求的页面在右边的pane中给予显示,而不跳转页面。如果没有使用此控件,则这一步可以省略,只是点击treeView结点后,将会跳转到请求的页面去。

SiteMapProvider的属性设置如图所示:


图5.4sitemap属性

只需将其SiteMapProvider属性设置为我们提供的provider即可,关于sitemapprovider的配置,参见配置篇中的番外篇。

这样最重要的一个页面就算完成了!

6.新建两个文件夹:admin和teacher,在admin中建一个页面admin.aspx,在teacher中建一个页面teacher.aspx。分别在两个页面中添加一个sitemappath控件即可。

7.由于刚进入首页时,未选择任何结点,所以需要给Splitter右边的pane一个初始的页面,根目录下新建一个Welcome.aspx页面,里面就一句话“欢迎使用xxx系统”即可。

在Default.aspx.cs中代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {                // ASPxSplitter1.GetPaneByName("ContentUrlPane").ContentUrl必须赋初始值,否则无法使用ASPxSplitter的页面框架(iframe)的功能        if (TreeView1.SelectedNode == null)        {            ASPxSplitter_Main.GetPaneByName("ContentUrlPane").ContentUrl = ResolveUrl("~/Welcome.aspx");        }        // 显示当前用户对应的角色      <span style="color:#ff0000;">  lb_role.Text = HubuGetRolesForCurrentUser();</span>    }    /// <summary>    /// 获取当前用户角色    /// </summary>    /// <returns></returns>    public string HubuGetRolesForCurrentUser()    {        string myRoles = "";        Oracle.Web.Security.OracleRoleProvider myOracleRoleProvider = (Oracle.Web.Security.OracleRoleProvider)System.Web.Security.Roles.Provider;        foreach (string myRole in myOracleRoleProvider.GetRolesForUser(System.Web.HttpContext.Current.User.Identity.Name))        {            myRoles = myRoles + myRole + " ";        }        return myRoles;    }}

如果没有ASPxSplitter控件,就不用做这一步了,但是上面在label中显示用户角色的代码应该有。

8.接下来是数据库的内容,因为访问控制是在sitemap表中实现的,所以需要在该表中添加我们的访问规则,内容如下:


可以用pl/sql developer登录后右键点击ora_aspnet_sitemap,选择Edit Data然后填入上述类容,applicationID必须与ora_aspnet_application中的ID一致,rowid可不填,会自动生成。

这样基本上所有的工作都做完了,按CTRL+F5运行网站,结果如图所示:

图8.1  登录界面

图8.2管理员的首页图

图8.3 管理员页面1

图8.4教师的首页图

图8.5教师页面1

       从图中可以看到,不同角色用户登录网站后,能看到的网站结构是不一样的,即使你在输入栏里输入别的角色的页面,你也无法访问,这就很好的体现了基于角色的访问控制。

三、总结:

        使用asp.net的membership机制,可以很轻松的帮助我们存储,管理用户信息,如果与角色管理一起,还能为我们提供强大的到页面一级的授权服务,这无疑减少了我们很多工作量。对于membership,主要掌握的应该是如何注册,配置,以及在网站中使用,这里讲解的都是以oracle作为数据源,由于.net 与SqlServer天然的关系,在SqlServer上使用membership机制相对来说要简单许多,网上也有很多相关的资料供大家参考。


0 0