




















(1)子角色的分类
子角色分为三类:字段值、字段、数据表。下面就三类子角色的实现进行说明。

(2)字段值类(数据行)子角色的实现

如上图所示,是子角色2的字段值类子角色权限的记录。RITEM是“资源项”字段。字段类的“资源项”的编码规则为第1位是大写英文字母“V”,表示资源类型,属于第一部分。
随后的一位或者多位大写字母表示数据表简码,是属于第二部分。比如上图的“VI12”和“VI17”的第2位是“I”, 该数据表简码I,从T_ZK_RESOURCE资源表查到是T_ZK_PROJECT 项目表。
最后的一位或者多位数字表示该资源顺序号,是属于第三部分。比如上图的“VI12”和“VI17”的数字12和数字17,表示T_ZK_PROJECT 项目表的项目ID为12和17的项目记录,具体见下图。

子角色权限_字段值(数据行)_权限图:

实现脚本如下:
(1)取字段值类的子角色权限
select
ritem, --资源项
ritemlevel --权限类别(禁止/允许)
from T_ZK_SUBROLE_C
where ritemtype='字段值' and subroleid=*** order by ritem
说明:对得到的ritem字段进行分析获取包含的数据表代码和该数据表的记录ID;
(2)取字段值类的子角色权限对应的数据表名
select
tablename, --数据表名
tablecname --数据表中文名
from T_ZK_RESOURCE where tableaname='***'
说明:根据第一步获取的数据表代码,从T_ZK_RESOURCE资源表得到对应的数据表名;
(3)根据第二步获取的数据表名和第一步获取的记录ID,形成该子角色的字段值类权限字符串,如子角色为2,数据表名为T_ZK_PROJECT,记录ID为12和17,则子角色2的字段值类权限字符串为【12,17】,授予子角色2的用户,在获取可访问项目的脚本建议如下:
select * from T_ZK_PROJECT where projectid in(12,17) and admindivision=
上述查询语句脚本中from子句的T_ZK_PROJECT即数据表名,where子句中的“12,17”为字段值类权限字符串。
(3)字段类子角色的实现

如上图所示,是子角色2的字段类子角色权限的记录。RITEM是“资源项”字段。字段类的“资源项”的编码规则为第1位是大写英文字母“C”,表示资源类型,属于第一部分。
随后的一位或者多位大写字母表示数据表简码,是属于第二部分。比如上图的“CI16”和“CI26”的第2位是“I”, 该数据表简码I,从T_ZK_RESOURCE资源表查到是T_ZK_PROJECT 项目表。
最后的一位或者多位数字表示该资源顺序号,是属于第三部分。比如上图的“CI16”和“CI26”的数字16和数字26,表示T_ZK_PROJECT 项目表的第16个字段和第26个字段,从T_ZK_COLUMN字段表查到分别是“合同编号”和“删除标志”字段。
最后如下图所示,是“CI16”和“CI26”资源项所对应的具体字段。

子角色权限_字段(数据列)_权限图:
实现脚本如下:
select
b.tablename, --数据表名
b.columnname, --字段名
b.columnname, --字段中文名
b.columnaname, --字段简名
a.ritemlevel --权限类别(禁止/允许)
from T_ZK_SUBROLE_C a,T_ZK_COLUMN b
where a.ritem=b.columnaname and a.ritemtype='字段' and a.subroleid=***
用以上脚本得到子角色的字段类权限以后,在查询该表记录的任何模块均要遵照子角色所设定的权限来执行。比如,子角色2禁止访问T_ZK_PROJECT 项目表的“合同编号”和“删除标志”字段,那么“项目背景信息”页面模块则不能显示这两个字段的数据。但是“项目修改”页面模块则暂时不受子角色2的权限所限制。
建议:以“项目背景信息”页面模块来实现子角色的字段类权限控制原理。字段类的子角色权限具有排他性。对同一数据表来说,权限类别要么只设置“允许”权限,要么都设置“禁止”权限。那么,对于设置“允许”权限的数据表来说,没有设置的其他字段则禁止访问;对于设置“禁止”权限的数据表来说,没有设置的其他字段则允许访问。比如上图的子角色2,设置对CI16、CI26为禁止权限,那么除这两个字段以外的其他字段,均允许访问。
(4)数据表类子角色的实现

如上图所示,是子角色2的数据表类子角色权限的记录。RITEM是“资源项”字段。字段类的“资源项”的编码规则为第1位是大写英文字母“T”,表示资源类型,属于第一部分。
随后的一位或者多位大写字母表示数据表简码,是属于第二部分。比如上图的“TQ”和“TR”的第2位分别是“Q”和“R”, 这两个数据表简码,从T_ZK_RESOURCE资源表查到是T_ZK_DEVICELOG路灯设备基本信息历史表和T_ZK_COMPONENTLOG路灯设备部件信息历史表。具体见下图。

子角色权限_数据表_权限图:

实现脚本如下:
(1)取数据表类的子角色权限
select
ritem, --资源项
ritemlevel --权限类别(禁止/允许)
from T_ZK_SUBROLE_C
where ritemtype='数据表' and subroleid=*** order by ritem
说明:对得到的ritem字段进行分析获取包含的数据表代码;
(2)取数据表类的子角色权限对应的数据表名
select
a.ritem, --资源项
a.ritemlevel, --权限类别(禁止/允许)
b.tablename, --数据表名
b.tabelcname --数据表中文名
from T_ZK_SUBROLE_C a,T_ZK_RESOURCE b
where substring(a.ritem,2,len(a.ritem)-1)=b.tableaname
and a.ritemtype='数据表' and a.subroleid=***
order by a.ritem
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。