子角色权限的实现
(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
|
作者: XuGang 网名:钢钢 |
出处: http://xugang.cnblogs.com |
声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址! |