继续,这是第五章了。我发现了,写文章比写程序还要有难度。
通用权限想要写的文章目录:(这是第五章)
1 、 简介、数据库的总体结构
2 、 介绍人员表组
3 、 介绍组织结构表组
4 、 介绍角色表组
5 、 介绍“项目自我描述表组”
6 、 权限到节点
7 、 权限到按钮
8 、 权限到列表(表单、查询)
9 、 权限的验证
10 、 资源方面的权限
11 、 角色管理的程序(给客户用的)
12 、 权限下放
13 、 个性化设置
A、 【自然框架】之通用权限(外传):杂谈
项目描述表组
这里的表比较多,主要分为两个部分,一个是“字典信息”,这里就不介绍了,感兴趣的话,请下载数据库说明文档;另一个就是装载配置信息的表。
项目描述,顾名思义就是想要用数据(记录)的形式来描述一个项目,当然不能所有的事情都能用数据的形式描述出来,只有和数据相关的地方才行。最初的目的是给我的几个自定义控件赋值用的,比如表格控件、表单控件、查询控件等,他们都需要很多的信息给他们的属性赋值,如果直接在代码里面写的话,那还不如直接拖拽控件简单呢,所以我就把需要的属性都放在了“表”里面。一开始并没有想到权限,后来才发现,只要修改一下SQL语句,就可以达到“权限”的目的,包括资源权限。同理,也可以达到“个性化设置”的效果。所以我感觉权限、个性化设置只是自然架构的一个副产品。当然你也可以说,通用权限和我的自定义控件绑定的太紧了,这个也没有办法,总之,先实现了需求再说,然后再想办法解决侵入性的问题。
为了便于大家的理解,在说明这些表的时候举一个举一个具体的例子吧。SQL Server 2000里面有一个 sysobjects 表,表里面有一个xtype字段,这个字段是说明类型的,比如xtype=’U ’,表示用户表,xtype=’V ’,表示视图。在网上查了一下,发现这个xtype字段至少有16种值,我做了一个表“Manage_Base_TableType”来记录这个信息。所以我这里就以这个表为例,说一下项目描述表组里的几个表的作用。
【Manage_Base_TableType的字段和数据】
【页面效果】
项目描述表的说明
1、Manage_Function,功能节点表。这里记录了一个项目的所有的功能节点。通过这个表就可以看到这个项目可以做什么。很有项目描述的味道吧。
【字段】
字段名 | 中文名 | 字段类型 | 大小 | 默认值 | 是否空 | 说明 |
---|---|---|---|---|---|---|
FunctionID | 节点ID | int | 4 | 1 | 0 | 主键 |
ParentID | 父节点ID | int | 4 | 1 | 0 | 员工姓名 |
ParentIDPath | 父节点ID的路径 | nvarchar | 30 | _ | 0 | 父节点ID的路径 |
NoteTitle | 节点名称 | nvarchar | 100 | _ | 0 | 节点名称 |
PowerMark | 权限标识 | nvarchar | 50 | _ | 0 | 一般情况下等于FunctionID |
NoteLevel | 级数 | int | 4 | 1 | 0 | 第几级节点 |
IsShowNote | 节点是否显示 | bit | 1 | 1 | 0 | 功能节点里面是否显示 |
IsShowPower | 角色是否显示 | bit | 1 | 1 | 0 | 角色选择是否显示 |
Sort | 排序 | int | 4 | 1 | 0 | 排序 |
WebURL | 网址 | nvarchar | 100 | _ | 0 | 打开网页的网址 |
Target | 目标 | nvarchar | 10 | _ | 0 | 目标 |
【示例】
这个表是权限到节点的关键表。下一章会详细说明,其实大家应该也知道了。
2、Manage_Table,记录数据库里的表的信息。他主要是区分一个字段是属于哪个表的。
【字段】
字段名 | 中文名 | 字段类型 | 大小 | 默认值 | 是否空 | 说明 |
---|---|---|---|---|---|---|
TableID | 表 | int | 4 | 1 | 0 | 主键 |
TableName | 表名 | nvarchar | 60 | _ | 0 | 表名 |
IDColumn | 主键名 | nvarchar | 30 | _ | 0 | 主键名 |
Type | 类型 | char | 2 | _ | 0 | 类型 |
Content | 表说明 | nvarchar | 50 | _ | 0 | 表说明 |
ExcelTableName | 工作表名称 | nvarchar | 50 | _ | 0 | 用于修改Excel里面的信息 |
【示例】
3、Manage_Columns,记录数据库里的表的字段的信息。在原有的基础上(字段名、字段类型、大小等),又增加了一些UI需要的信息,比如控件类型、验证方式等,就是说这个字段在表单里面表现为什么控件,这些是表单控件需要的信息。
【字段】
字段名 | 中文名 | 字段类型 | 大小 | 默认值 | 是否空 | 说明 |
---|---|---|---|---|---|---|
ColumnID | 字段标识 | int | 4 | 1 | 0 | 主键 |
TableID | 表ID | int | 4 | 1 | 0 | 外键 |
ColSysName | 字段名称 | nvarchar | 50 | _ | 0 | 数据库里的名称 |
ColName | 对外名称 | nvarchar | 50 | _ | 0 | 显示给用户看的名称 |
ColType | 字段类型 | nvarchar | 20 | _ | 0 | 字段类型 |
ColSize | 字段大小 | int | 4 | 1 | 0 | 字段大小 |
ControlKindID | 控件类型 | int | 4 | 1 | 0 | 外键 |
CheckKindID | 验证类型 | int | 4 | 1 | 0 | 外键 |
CheckUserDefined | 自定义验证 | nvarchar | 50 | _ | 0 | 自行定义验证的方式,通过正则表达式实现。 |
ControlInfo | 控件描述 | nvarchar | 500 | _ | 0 | 描述控件 |
ControlID | 控件ID | nvarchar | 50 | _ | 0 | 在页面里的控件ID |
【示例】
4、Manage_Function_Info,这里记录了分页控件需要的属性,还有节点的添加、修改、删除时需要的表。
【字段】
字段名 | 中文名 | 字段类型 | 大小 | 默认值 | 是否空 | 说明 |
---|---|---|---|---|---|---|
FunctionID | 节点ID | int | 4 | 1 | 0 | 主键 |
FunctionTitle | 列表标题 | nvarchar | 30 | _ | 0 | 列表标题 |
TableNameList | 列表用的表名 | nvarchar | 100 | _ | 0 | 列表用的表名 |
TableNameExcel | 导出Excel用的表名 | nvarchar | 100 | _ | 0 | 导出Excel用的表名 |
ForeignColumn | 外键名 | nvarchar | 50 | _ | 0 | 如果是从表的话,可以填写外键表,用于显示数据时候的过滤条件 |
SQLKindID | 分页算法 | int | 4 | 0 | 0 | 分页算法 |
PKColumn | 主键名 | nvarchar | 50 | _ | 0 | 主键名 |
ShowColumns | 显示的字段 | nvarchar | 500 | * | 0 | 显示的字段 |
OrderColumns | 排序字段 | nvarchar | 30 | _ | 0 | 排序字段 |
PageSize | 一页记录数 | int | 4 | 20 | 0 | 一页记录数 |
QueryAlways | 固定的查询条件 | nvarchar | 300 | _ | 0 | 固定的查询条件 |
Query | 第一次的查询条件 | nvarchar | 300 | _ | 0 | 第一次的查询条件 |
NaviCount | 页号数量 | int | 4 | 10 | 0 | 页号数量 |
TableNameAdd | 添加数据用表 | nvarchar | 100 | _ | 0 | 添加数据用表 |
TableNameUpdate | 修改数据用表 | nvarchar | 100 | _ | 0 | 修改数据用表 |
TableNameView | 查看数据用表 | nvarchar | 100 | _ | 0 | 查看数据用表 |
TableNameDel | 删除数据用表 | nvarchar | 100 | _ | 0 | 删除数据用表 |
5、Manage_FunFindCol,记录一个节点里面的查询控件需要的字段,又增加了查询类型的字段。
【字段】
字段名 | 中文名 | 字段类型 | 大小 | 默认值 | 是否空 | 说明 |
---|---|---|---|---|---|---|
FindColID | 序号 | int | 4 | 1 | 0 | 主键 |
FunctionID | 节点ID | int | 4 | 1 | 0 | 外键,关联节点 |
ColumnID | 字段ID | int | 4 | 1 | 0 | 外键,关联字段 |
Sort | 排序 | int | 4 | 1 | 0 | 同一节点下的排序 |
FindKindID | 查询方式 | int | 4 | 1 | 0 | 外键,查询方式 |
DefaultValue | 默认值 | nvarchar | 50 | _ | 0 | 第一次显示查询的时候的字段的默认查询关键字 |
clearTDStart | 去掉开头的TD | int | 4 | 1 | 0 | 合并到上一个TD,设置空格 |
clearTDEnd | 去掉结尾的TD | int | 4 | 1 | 0 | 接收下一个TD |
TDColspan | TD数 | int | 4 | 1 | 0 | 一个字段占用多少TD |
【示例】
6、Manage_FunFormCol,记录一个节点里面的表单控件需要的字段,增加了提示信息、控件状态等字段。可以绘制表单
【字段】
字段名 | 中文名 | 字段类型 | 大小 | 默认值 | 是否空 | 说明 |
---|---|---|---|---|---|---|
FormColID | 序号 | int | 4 | 1 | 0 | 主键 |
FunctionID | 节点ID | int | 4 | 1 | 0 | 外键,关联节点 |
ColumnID | 字段ID | int | 4 | 1 | 0 | 外键,关联字段 |
Sort | 排序 | int | 4 | 1 | 0 | 同一节点下的排序 |
ColHelp | 提示信息 | nvarchar | 100 | _ | 0 | 出现在控件旁的提示信息,比如“用户名必须4-20个字符” |
HelpStation | 提示信息的位置 | int | 4 | 1 | 0 | 1:不显示;2:左面;3:右面 |
DefaultValue | 默认值 | nvarchar | 50 | _ | 0 | 控件的默认值 |
ControlState | 控件状态 | int | 4 | 1 | 0 | 1:正常;2:只读;3:不可用 |
IsShow | 是否显示 | int | 4 | 1 | 0 | 1:显示;0:不显示 |
ClearTDStart | 去掉开头的TD | int | 4 | 0 | 0 | 合并到上一个TD,设置空格 |
ClearTDEnd | 去掉结尾的TD | int | 4 | 0 | 0 | 接收下一个TD |
TDColspan | TD数 | int | 4 | 1 | 0 | 一个字段占用多少TD |
【示例】
7、Manage_FunListCol,记录一个节点的数据列表需要的字段。可以用这个信息绘制表格的表头。
【字段】
字段名 | 中文名 | 字段类型 | 大小 | 默认值 | 是否空 | 说明 |
---|---|---|---|---|---|---|
ListColID | 序号 | int | 4 | 1 | 0 | 主键 |
FunctionID | 节点ID | int | 4 | 1 | 0 | 外键,关联节点 |
ColumnID | 字段ID | int | 4 | 1 | 0 | 外键,关联字段 |
Sort | 排序 | int | 4 | 1 | 0 | 同一节点下的排序 |
ColWidth | 列宽度 | int | 4 | 0 | 0 | TD的宽度 |
ColAlign | 列对齐方式 | nvarchar | 10 | left | 0 | TD的对齐方式 |
Format | 格式化 | nvarchar | 30 | _ | 0 | 对信息进行格式化 |
MaxLength | 最大字符数 | int | 4 | 0 | 0 | TD里面最多显示多少字符 |
【示例】
8、Manage_ButtonBar,记录了一个节点有哪些功能按钮,比如添加、修改、删除、查询等。可以添加任意功能的按钮。可以绘制列表页面里的按钮。
【字段】
字段名 | 中文名 | 字段类型 | 大小 | 默认值 | 是否空 | 说明 |
---|---|---|---|---|---|---|
ButtonID | 序号 | int | 4 | 1 | 0 | 主键 |
FunctionID | 节点ID | int | 4 | 1 | 0 | 外键,关联节点 |
BtnTitle | 按钮标题 | nvarchar | 50 | _ | 0 | 按钮上面显示的文字 |
BtnID | 按钮ID | nvarchar | 50 | _ | 0 | 按钮的ID |
BtnTypeID | 按钮类型 | int | 4 | 1 | 0 | 按钮类型 |
URL | 打开的网址 | nvarchar | 240 | _ | 0 | 单击按钮后打开的网页 |
WebWidth | 打开窗口宽度 | int | 4 | 1 | 0 | 打开窗口宽度 |
WebHeight | 打开窗口高度 | int | 4 | 1 | 0 | 打开窗口高度 |
IsNeedSelect | 是否需要选中数据 | int | 4 | 0 | 0 | 0:不需要;1:需要 |
Sort | 排序 | int | 4 | 1 | 0 | 同一节点下的排序 |
【示例】
这里先简单介绍一下表结构和里面的内容。到这里表结构的介绍就基本结束了,后面就是如何来应用了。