ASP.NET 结合 SQL Server 数据库处理递归关系






4.20/5 (2投票s)
构建基于递归数据的 Web 组件。
我参与了一个企业授权矩阵管理系统的开发,该系统维护着关于谁将批准特定组织单位的内部或外部最终用户对特定 IT 系统的访问权限的信息。其目的是帮助强制执行萨班斯-奥克斯利法案或 Bill-C198 的合规性要求。在设计阶段,我考虑使用具有递归关系的数据表结构来应对无限级别的组织/系统层次结构的需求以及动态变化的系统配置菜单布局。
数据结构设计将对 Web 表示层的实现提出挑战,因为
1. 在设计时,您不知道实际的组织单位和系统配置菜单的数量和级别(因为我所在的公司一直在进行收购),并且所有相关的变更管理和报告都必须通过 Web 界面完成。
2. 区域汇总报告功能的实现将不那么直接,因为管理层希望能够钻取到系统配置菜单的所有级别,并查看特定行政区域或区域内所有分支机构的相应授权者表格。
得益于我的雇主,我获得了发布此项目原始代码库的许可,该项目是用 Visual Studio 2005 和 DotNet Framework 2.0 开发的。此版本并非生产质量,但仍然展示了所有主要功能。尽管它是使用支持 AJAX 的 NetAdvantage Web 控件库实现的(您至少需要安装 http://www.infragistics.com/downloads/default.aspx 上的 NetAdvantage Component library ASP.NET 2008 Vol 1 的试用版来运行此项目),但它确实说明了一些关于如何在 ASP.NET 2.0 应用程序中处理递归关系的通用思想,您可以切换到其他 Web 控件库,如“Telerik”(来自 http://www.telerik.com/,我曾尝试过),甚至使用自己的 Web 控件进行前端开发,而无需更改基本设计。
“InitSummaryObjects1.cs”文件中的小算法用于通过计算数据库中递归相关数据的“列跨度”和“行跨度”来填充多级表格标题。我相信您甚至可以在具有 JSF 或 Tapestry 作为前端的 JEE 应用程序中应用此算法,以实现灵活的基于维数的数据报告功能。因此,我希望在一定程度上,这个演示代码库可以展示一种应对后端利用递归表结构的 Web 2.0 企业级应用程序的通用思路和方法。
“RegionSummary.aspx”页面中显示的实际数据缓存在应用程序上下文中,因此当用户单击单选按钮钻取到不同的报告级别时,如果您的 IIS 服务器性能和网络连接良好,响应时间几乎是瞬时的。
由于我在数据库层大量使用了 Transact SQL 存储过程,因此后端数据库不易迁移到不同的平台,如 MySql、Oracle 或 DB2,但这仍然是可能的。
您可能需要一个可用的 Active Directory 实例来测试完整的函数集,因为 AD 需要进行基于窗体的身份验证和搜索潜在授权者。该软件包确实提供了一种变通方法,如果您没有 AD 设置但仍想查看大部分功能。如果您想完全脱离 AD,您将必须在“web.conf”文件中用其他提供程序替换现有的“membershipADProvider”,并在“EditAuthMatrix.aspx.cs”文件和“EditBackupAuth.aspx.cs”文件中实现您自己的潜在授权者和备用授权者查找函数。至于“备用授权者”的概念,就是一个人,现有的授权者会将某些区域的职责委托给这个人一段时间,以便在主授权者缺席时,备用授权者仍然可以向最终用户授予某些系统访问权限。
为了满足审计要求,矩阵的所有主要修改活动都将被记录到一个报告表中,您还可以基于该表生成各种 Web 报告以进行历史跟踪,这是通过使用表触发器实现的。
有关进一步的安装提示,请参阅网站根目录下的 readme.doc 文件。在 App_Data 目录中提供了两个演示数据库文件,它们可以附加到 Sql Server 2000 或 2005 Enterprise Edition 甚至 Sql Server 2005 Express Edition。