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中显示用户角色的代码应该有。
可以用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机制相对来说要简单许多,网上也有很多相关的资料供大家参考。
- membership(5)----实战篇
- membership(4)---API篇
- Membership学习(一) Membership介绍
- Membership学习(二)membership入门
- Membership学习(三)Membership Providers介绍
- Membership学习(三)Membership Providers介绍
- Membership学习(一) Membership介绍
- Membership学习(二)membership入门
- Membership学习(三)Membership Providers介绍
- Membership学习(一) Membership介绍
- Membership学习(二)membership入门
- Membership学习(三)Membership Providers介绍
- Membership学习(三)Membership Providers介绍
- Membership 学习(一)Membership介绍
- membership配置篇
- Membership配置篇
- membership配置篇
- membership(1)---理论篇
- Objective-C中多态、动态类型和动态绑定
- 数据库(分组函数)
- Mac os下的一些常用命令
- unresolved external symbol __imp__timeGetTime@0
- 常见排序选择、冒泡、插入
- membership(5)----实战篇
- Unity3D在Android设备上返回按钮失效解决办法
- Nginx.conf介绍
- 分享osg+osgEarth环境配置及相关知识
- 水晶报表乱码
- 如何用MFC画椭圆
- C语言获取当前系统时间的几种方式
- 高仿小米launcher(ZAKER)跨屏拖动item(有源码)
- voltDB链接