五级权限查询以及ESOP组织机构树构造原理
一.基本概念
客户管理将操作员分为五个角色,分为五级:省级管理员,地市级管理员,区县管理员,客户经理主管,客户经理
对应的字典如下:
select * from dict_item where groupid = 'NGMgrRight';
在业务数据查询时都是需要分权限查询的,省级管理员查询全省的数据,地市管理员查询本地市的数据,区县管理员查询本区县的数据,客户经理查询自己管辖的客户
角色定义在workgroup这个视图中,而给操作员分配对应的角色定义在operator_workgroup视图中。
二.五级权限查询以及组织机构树
1.ESOP系统中五级查询有哪五级,又是如何实现的呢?
ESOP系统中的五级查询分为:省(查询全省数据),市(查询本市数据),县(查询本区县数据),部门(查询部门数据),人员(查询管辖下的数据)
1)省级,地市级操作员查询时只需要region限制条件即可
2)区县一级需要根据区县的id,到v_esop_organization_m视图中迭代出下属所有的组织机构,查询出所有组织机构的值
3)同2)
4)人员一级,需要关联cm_cu_groupcustservchannel(集团客户服务渠道表)查询出本操作员所管辖的集团客户数据
2.当一个操作员登陆时,我们是如何知道他属于哪一级,且最大的组织机构是什么,即操作员的最大权限是如何得到的?
1)首先要了解ESOP系统的权限分为角色权限和数据权限(数据权限,目前只有江苏在用),获取操作员的最大权限,即是取此操作员的角色权限和数据权限的最大值
2)通过查询v_esop_userdataauth表获取操作员的最大数据权限对应的orgid,orglevel。取orglevel最小的一条记录。
selectorg.orgid, org.orglevel, org.orgname, org.parentid, org.region, org.esop_type
fromv_esop_organization_m org
whereorg.orgid in (select t.authobjectid
from v_esop_userdataauth t
where t.staffid = #staffid#
and t.AUTHID = #authid#) and org.esop_type=#esopType#
3)如果是最大数据权限为空,则通过操作员的工号查询operator_workgroup表获取操作员的最大角色,然后根据操作员的不同角色通过查询v_esop_organization_m以及district,organization等表获取角色对应的最大的组织机构orgid,orglevel。
① 取最大的权限角色: select dict.dictid,
dict.dictname,
dict.groupid,
dict.sortorder,
dict.status,
dict.statusdate,