上文讲了新设计的权限架构的细节,下面将与之相关的数据库四个表的表结构与字段定义列一下:
表一:rdApplications
1. 干嘛的
这个表存的是所有系统的字典。
2. 表结构
| 字段名 | 类型 | 含义 |
|---|---|---|
| tln_sid | int(11) | 此条记录的SID |
| tlnAppName | varchar(50) | 系统应用的名称 |
| tlnIsFrozen | tinyint(1) | 系统应用是否被冻结 |
| tlnLastModifiedTime | timestamp | 记录最新更新时间 |
表二:rdPermissionDictionary
1. 干嘛的
这个表是用来存储所有权限信息的字典。
2. 表结构
| 字段名 | 类型 | 含义 |
|---|---|---|
| gpd_sid | int(11) | 此条记录的SID |
| gpdAppId | int(11) | 系统字典表SID |
| gpdPermissionCode | varchar(50) | 权限代码 |
| gpdPermissionName | varchar(50) | 权限名称 |
| gpdFrontEndRoute | varchar(100) | 对应的前端路由 |
| gpdBackEndRoute | varchar(100) | 对应的后端路由 |
| gpdIsFrozen | tinyint(1) | 权限是否被冻结 |
| gpdDisplayOrderRank | int(11) | 展示时可能的显示顺序 |
| gpdLastModifiedTime | timestamp | 当前记录最新更新时间 |
表三:rdRoleDictionary
1. 干嘛的
这个表是用来存储所有角色信息的字典。
2. 表结构
| 字段名 | 类型 | 含义 |
|---|---|---|
| ghr_sid | int(int) | 此条记录的SID |
| ghrRoleName | varchar(100) | 角色名称 |
| ghrHospitalAreaIdOfRole | int(11) | 角色所属院区 |
| ghrIsFrozen | tinyint(1) | 角色是否被冻结 |
| ghrLastModifiedTime | timestamp | 当前记录最新更新时间 |
表四:rdRolePermissionMap
1. 干嘛的
这个表是用来存储角色与其所包含权限的映射。
2. 表结构
| 字段名 | 类型 | 含义 |
|---|---|---|
| grp_sid | int(11) | 此条记录的SID |
| grpRoleId | int(11) | 角色表的角色SID |
| grpPermissionId | int(11) | 权限表的权限SID |
| grpLastModifiedTime | timestamp | 当前记录最新更新时间 |
表五:rdUserPermissionDataScope
1. 干嘛的
这个表是用来存储用户甲在权限A下的数据域。
2. 表结构
| 字段名 | 类型 | 含义 |
|---|---|---|
| tnp_sid | int(11) | 此条记录的SID |
| tnpUserId | int(11) | 用户表的用户SID |
| tnpPermissionId | int(11) | 权限表的权限SID |
| tnpDataScope | varchar(1000) | 数据域分级存储*,存储的时候就要求按照约定** 使用正则表达式去存储 |
| grpLastModifiedTime | timestamp | 当前记录最新更新时间 |
* 数据分级与实体代码事先便定义好,分为[‘院区’, '大科室', '小科室', '医疗组(护理组)', '个人']五个等级,其中院区为最高等级,通俗意义上的医院在系统中仅作为象征存储相关信息,并不参与具体业务层面的逻辑。
** 具体编码格式约定如下:/AABBCCDDEE/ 代表AA院区BB大科室CC小科室DD医疗组下的EE这个用户,如果数据域中存储的是上述代码,那就拥有这个权限的EE用户的数据域;如果登录用户权限比较大,那他可能拥有整的DD医疗组的在这个权限下的数据域,此时数据域代码应该这么写 /^AABBCCDD[0-9]{2}/。注:初老师说全部用数字做 CODE,规则定为:院区3位、大科室2位、小科室2位、医疗组(护理组)2位、个人3位。