你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 计算机安全与维护
利用LINQ to XML实现资源权限灵活控制(下)
 

 

2)       采用LINQ to XML技术必须要引用的命名空间

using System.Xml.Linq

3)       根据权限“标签”文件各XML元素如表1所示,通过LINQ to XMLXDocument类创建一个权限校验的XML模板。

    //采用LINQ to XML技术创建一个权限校验XML文件

        XDocument doc = new XDocument(

            new XDeclaration("1.0", "utf-8", "yes"),

            new XElement("authconfig",

                new XElement ("create","ssl"),

                new XElement ("resoure","资源"),

                new XElement("public"),

                new XElement("protected"),

                new XElement("private")));

4)       通过对LINQ to XML对指定的父XML元素进行查询并追加相应的权限记录信息

        private void AppendNode(string ParentNodeName,XElement Node)

        {

            //查找相应父节点,以追加权限记录信息

var ParentNode = doc.Descendants(ParentNodeName).First(el=>el.Name.ToString()==ParentNodeName);

            ParentNode.Add(Node);

            ShowConfigInfo();

        }

5)权限记录信息的组织及追加权限记录信息方法的调用

权限记录信息采用LINQ to XMLXElement类来进行组织。当用户对权限记录信息的需求发生变更后(例如:增加读写/只读、收费/免费等权限),只需要在此处进行相应的处理就可以了,XML文件解析处需要稍做调整外,其它代码基本不需改动。

var Node = new XElement("group", new XAttribute("name", cmbGroupName.SelectedItem.ToString()));

AppendNode("private", Node);  //追加权限记录信息的方法调用

6)权限记录信息解析

在此处给人感觉只是用来显示相关信息意义不大,实际使用中我们可以根据相应的遍历对一组用户来进行权限的校验,大大提高了响应速度。

//这里不对publicprotected节点下的信息显示,目的是显示LINQ TO XML的另一种查询方法

 //我们也可以从根节点直接遍历显示所有信息 

 var gpinfo = from el in doc.Elements("authconfig").Elements("private").Elements("group")

              select el;

 foreach (var item in gpinfo)

{

   txtParse.Text = txtParse.Text + item.Attribute("name").Value + "\r\n";

}

7)权限记录信息校验主要工作是对单个用户、组、节点访问某一资源时所需要的判断处理。下面代码分两部分,第一部分是针对带XML属性的权限记录文件查询,第二部分是针对不带属性的记录信息查询,请注意两种查询语句的不同之处。

1)带属性的权限记录信息查询

  var query = from el in doc.Elements("authconfig").Elements("private").Elements(

                           cmbSearchType.SelectedItem.ToString())

                             where el.Attribute("name").Value == txtSearch.Text

                             select el;

 

 if (query.Count() > 0)

     txtParse.Text = "搜索成功";

 else

    txtParse.Text = "搜索失败"

2)不带属性的权限记录信息查询

  var query= from el in doc.Elements("authconfig").Elements("private").Elements

                                 (cmbSearchType.SelectedItem.ToString())

                             where el.Value == txtSearch.Text

                             select el;

 

 if (query.Count() > 0)

     txtParse.Text = "搜索成功";

 else

     txtParse.Text = "搜索失败";

五、结语
    程序的可移植、可复用、可扩展一直以来都是程序员讨论的热门话题。微软推出系列新特性之一的LINQ to XML,使我们在资源权限灵活控制上实现了部分这样的想法。希望通过这个讨论能够起到抛砖引玉的作用。本文的例子在Windows XP SP3Visual Studio 2008 SP1下编译通过。

 

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089