6.5 资源管理的设计与实现
6.5.1 资源管理的程序原型设计
本文设计与开发的政务系统通过资源分类来管理资源。
如图6.5所示,资源分类的设置是为了方便管理机关内部的所有资源,对于本办公系统来说,所有系统资源隶属“办公桌面板块”大类,其下又细分为资源管理、角色权限管理等二级类。
如图6.6所示,在二级分类下包含了具体的系统资源,如资源管理类下就包含了资源分类管理、资源管理、操作管理和权限管理等管理资源。
图6.5 资源分类管理
图6.6 资源管理
从图6.6可以看出,基于WEB应用程序的特点,本系统的可分配资源大多是一些服务器端ASPX页面应用程序。对于这些ASPX页面,在资源数据表中保存着对应的链接地址。
同一个资源可能对应着多个不同的操作,如对数据库表资源的查询、修改、删除等操作。由于本系统的可分配资源大多是一些服务器端页面,因此系统的资源操作主要是页面链接(link)。保存操作的数据表包括操作名称(如link)和操作功能描述两个字段。
资源以及对资源的某项操作就构成了可以向用户分配的权限。如图6.7的ASPX页面原型所示,“冻结流程”和“link”操作就是一项可分配的权限,把它分配给用户,用户就可以访问服务器端的流程冻结程序页面,完成对流程的冻结管理。
事实上,根据分配给用户的不同权限(页面链接),用户登录系统后,在如图6.6的页面左侧菜单将显示用户可以访问的功能板块(资源分类,如业务数据库管理),以及功能板块下用户可以点击访问的页面菜单,从而控制不同用户的资源访问权限。图6.6的左侧菜单显示的是超级管理员可以点击访问的资源。
图6.7 权限管理
6.5.2 资源管理的程序实现
资源管理板块的各程序实现方法类似,都使用了ASP.NET的DataGrid控件。下面主要讨论资源管理程序admin/Resource.aspx的具体实现。
Resource.aspx页面程序的主要代码如下:
<%@ Page language="c#" Codebehind="Resource.aspx.cs"
Inherits="workflow.admin.Resource" %>
.......
<body MS_POSITIONING="GridLayout" bgColor="#f5fafe">
<form id="Form1" method="post" runat="server">
<table height="60" width="100%" border="0">
<tr>
<td></td>
</tr>
</table>
<table width="100%" border="0">
<tr>
<td style="FONT-SIZE: 16px" align="center">资源管理数据表</td>
</tr>
<tr height="50">
<!-- span控件主要用于显示错误信息,当然也完全可以用Label控件
<td align="right"><span id="Message" style="FONT-SIZE: 11pt; COLOR: red;
FONT-FAMILY: Arial" runat="server"></span>
</td>
</tr>
<tr>
<td>
<asp:datagrid id="DataGrid1" runat="server"
HeaderStyle-HorizontalAlign="Center" Width="100%"
DataKeyField="ResourceID" AllowPaging="True">
<ItemStyle Font-Size="13px" HorizontalAlign="Center" Height="28px"
VerticalAlign="Bottom"></ItemStyle>
<HeaderStyle Font-Size="16px" HorizontalAlign="Center" Height="30px"
VerticalAlign="Middle" BackColor="#EEEEEE"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="序号">
<ItemTemplate>
<FONT face="宋体">
<!-- 在模板列使用数据绑定容器,itemindex是容器固有的数据项,
记录每一个记录的索引号,计数从0开始 -->
<%#(int)DataBinder.eval_r(Container, "itemindex") + 1%>
</FONT>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="资源分类">
<ItemTemplate>
<%#DataBinder.eval_r(Container.DataItem,"fullcategoryname")%>