《扩展—根据用户角色权限在母版页显示导航》由会员分享,可在线阅读,更多相关《扩展—根据用户角色权限在母版页显示导航(6页珍藏版)》请在金锄头文库上搜索。
1、根据用户角色在母版页动态显示导航根据用户角色在母版页动态显示导航(角色(角色-权限权限-站点导航)站点导航)每个网站都会有站点导航功能,用户点击站点导航上的链接就可以进入相应的页面。很多情况下,站点导航要求能够根据用户角色的不同权限自动生成不同的链接,而不是静态的导航列表。比如,当系统有多种不同角色的用户时,要求根据用户角色显示不同的站点导航。这时候,常用的有三种方法:1、根据用户角色注册和使用多个站点地图(.sitemap 文件) ;2、使用 XmlDataSource 作为导航控件的数据源,然后在.cs 文件中,编写代码根据用户角色,修改 XmlDataSource 的.XPath 属性值
2、实现;3、在后台代码.cs 文件中编写代码,根据用户角色,使用 System.Text. StringBuilder 类向页面动态添加 HTML 代码实现。示例:假设当前系统有两种用户角色:管理员、学生,分别编号为1 和 2,1 表示管理员,2 表示学生。管理员和学生的操作权限不同。1、站点导航:可以用超链接、Menu 或 treeView 控件做为站点导航。当系统 有多种不同角色的用户时,要求根据用户角色显示不同的站点导航。而要记 住当前登录的用户属于哪一种角色,需要用 Session 对象来保存。方法:在登 录页面,当用户登录成功后,分别用Session“userName“和 Sessio
3、n“userRole“将用户名和用户角色记录下来,接着在母版页根据 Session“userRole“的值显示不同的站点导航。下面列出三种常用的方法。方法一:根据用户角色注册和使用多个站点地图(.sitemap 文件)(1) 对应于“管理员”的操作权限添加一个站点地图 web1.sitemap:(2) 对应于“学生”的操作权限添加一个站点地图 web2.sitemap:(3) 新建一个母版页 MasterPage1.master,向母版页添加一个SiteMapDataSource 控件 SiteMapDataSource1,和一个 treeView 控件treeView1。treeView1
4、属性设置:DataSourceID=” SiteMapDataSource1”(4) 在 web.config 中的和之间注册不同用户角色对应的站点地图(5)在 MasterPage1.master.cs 中,在过程 Page_Load()添加代码,根据用户类型动态指定 SiteMapDataSource1 的 SiteMapProvider 值,达到根据用户类型显示不同站点导航的目的:protected void Page_Load(object sender, EventArgs e)if (Session“userRole“ = null)Response.Redirect(“login
5、.aspx“);elseif (!IsPostBack)/初始化站点导航树String type = Session“userRole“.ToString();if (type = “1“)SiteMapDataSource1.SiteMapProvider = “SiteMapProvider1“;elseSiteMapDataSource1.SiteMapProvider = “SiteMapProvider2“;方法二:使用 XmlDataSource 作为导航控件的数据源,根据用户角色修改XmlDataSource 的 XPath 属性值来动态获取对应的导航,适用于用 treeView
6、 控件做为站点导航的情况(1)编写用于导航的 XML 文件 sitemap.xml,列出所有站点导航,并定义属性 role 指明哪种角色的用户可以访问(特别注意,为了能使 XML 文件中的导航信息正常显示到 TreeView 中,必须为不同层次的结点起不同的名称):(2)新建一个母版页 MasterPage2.master,向母版页添加一个XmlDataSource 控件 XmlDataSource1,和一个 treeView 控件 treeView1。XmlDataSource1 属性设置:DataFile=”/sitemap.xml” XPath=”/siteMapNode”treeVie
7、w1 属性设置:DataSourceID=”XmlDataSource1” MaxDataBindDepth=2对 treeView1,编辑 TreeNode 数据绑定TreeView DataBindings 编辑器添加两个结点:siteMapNode:NavigateUrlField=url TextField=title Node:NavigateUrlField=url TextField=title(3)在 MasterPage2.master.cs 中,在过程 Page_Load()添加代码,根据用户类型动态指定 XmlDataSource1 的 XPath 值,达到根据用户类型显
8、示不同站点导航的目的:protected void Page_Load(object sender, EventArgs e)if (Session“userRole“ = null)Response.Redirect(“login.aspx“);elseif (!IsPostBack)/初始化站点导航树String type = Session“userRole“.ToString();if (type = “1“)this.XmlDataSource1.XPath = “/siteMapNode“;elsethis.XmlDataSource1.XPath = “/siteMapNode/
9、Noderole=2 or role=12“;对比方法一和方法二的优缺点。方法三:在后台代码.cs 文件中编写代码,根据用户角色,使用 System.Text. StringBuilder 类向页面动态添加 HTML 代码实现。适用于超链接做为站点导航的情况1、新建母版页、新建母版页 MasterPage3.master,在母版页 MasterPage3.master 的HTML 代码中,添加一个层:在 MasterPage3.master.cs 中,引入命名空间using System.Text;在过程 Page_Load()中,添加代码,向层 index 中动态添加 HTML 代码:pro
10、tected void Page_Load(object sender, EventArgs e)if (Session“userRole“ = null)Response.Redirect(“login.aspx“);elseif (!IsPostBack)String type = Session“userRole“.ToString();StringBuilder reader = new StringBuilder();reader.Append(“);reader.Append(“);reader.Append(“查看学生信息“);if (type = “1“)reader.Append(“添加学生信息“);reader.Append(“删除学生信息“);reader.Append(“查看留言信息“);reader.Append(“首页“);reader.Append(“ “);reader.Append(“);this.index.InnerHtml = reader.ToString();if (Session“userName“ = null)Label1.Text = “欢迎你进入本系统“;elseLabel1.Text = Session“userName“.ToString() + “,欢迎你进入本系统“;