摘 要 采用LINQ to XML技术实现资源权限信息在XML文件中的存储控制。
关键字 XML,LINQ to XML,资源权限,标签
一、 设计背景
网上到处都可以看到针对功能的权限控制。但针对于资源的权限控制由于千差万别,所以一般都会根据需求的不同而设计不同的控制方式,造成了大量的重复开发。通过研究尝试采用给资源“贴标签”的方式,将用户对资源的权限控制要求记录于“标签”当中,让资源本身来做为权限控制的一部分可以有效的处理权限变更造成的大规模代码修改,提高了复用率(在这里把资源形式限定在视频资源以便于下面的讨论)。
假设有一个三级结构(中央、省、市),分布在不同物理位置的网站。每个网站有自己的控制机制,而不是单纯的镜像。资源从创建到在各网站间流通都需要不同的权限来进行控制。下面列举几种可能的资源权限控制情况:
场景1:网站内用户资源权限控制。资源发布者允许自己的几个朋友观看。场景2:网站内组间资源权限控制。资源发布者允许自己的组内用户观看。场景3:站点间资源权限控制。资源发布者将自己的资源发布到指定的几个节点网站。场景4:站点对外资源权限控制。资源发布者允许非节点网站的用户可以进行访问。
我们可以看到针对资源权限的控制分为了三大类:站内权限、站间权限、站外权限,如图1所示。
图1 权限权限控制示意图
这时有人会说根据上述需求完全可以设计出一个令人满意的资源权限控制模型,但问题还没有完全解决。当你根据设计模型生成了相应的关系型数据库,编写完成代码后,用户又提出了需要增加资源删除的控制权限,再过段时间又要加入修改的控制权限……,这时需要重新考虑整体架构,修改数据库及相应代码。
如何采用更少的变动来达到灵活处理用户针对资源权限的控制,这就回到我们前面说的,给资源“贴标签”。通过研究我们最终决定采用XML文件来做为“标签”的载体,采用LINQ to XML做为操作XML文件的手段。
二、 技术简介
1、关系型数据库与XML文件存储控制权限设置的对比
关系型数据库在存储控制权限设置时,需要提前考虑控制权限的整体设计。当增加控制权限的属性时,则需要修改相应的数据库字段,同时还需要将数据表之间的关系一并考虑在内。与之相对应的程序也需要随之更改,造成了权限控制的灵活性降低。
XML(EXtensible Markup Language 可扩展置标语言)与关系型数据库相比有着得天独厚的优势。XML文件是以树状结构做为存储架构,当需要新增字段时只需要通过增加元素和属性即可完成相应的操作。同时可以通过XML Schema来控制数据存储的准确性。
2、 LINQ to XML
LINQ 做为微软在.NET Framework下推出的新特性之一,它以其灵活的查询及可扩展编程,被越来越多的开发人员所关注。由于LINQ to XML与LINQ有着很好的集成性,可以通过LINQ中类似SQL的语句,对内存中的XML文档进行查询检索相应的元素与属性,摆脱了原来复杂冗长的查询方法。
|