XuGang

记录一个程序员的成长

 

子角色权限的实现

 

(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

 

 

posted on 2012-02-03 11:55  钢钢  阅读(1235)  评论(0编辑  收藏  举报

导航