第一阶段:结合实际业务场景的迫切需求,先用起来:
1、优先满足:以往可能就是单纯的满足各机构及机构部门总、数据分析岗的同事,下载及查阅相关数据;
2、存在风险:对于数据的权限管理也算是比较开放式的管理,科长也可以查阅整个部门的权限;
3、难以拓展:因之前涉及的权限体系,就单纯的1种模式,以部门进行限制,根据帆软设置后台的部门,进行限制;
4、维护麻烦:因之前设置的权限以部门为限制条件,不仅无法做到数据更小粒度化,甚至因业务机构经常调整部门及变更部门名称,导致后期维护成本高。
这当中,主要是使用到了模版后台设置的参数,如下图:参数 GETUSERDEPARTMENTS()【这个就是帆软系统自带的部门字段】,一定要记得选择公式。
则在DS1数据集中,即可使用bm这个参数,在数据集中进行过滤数据,当时这样子就实现了部门数据的过滤。
第二阶段:关注数据风险问题,解决数据权限;
1、针对这个问题,当时思考也是考了很多针对不同的角色跟职务等使用者进行归类:大致分为:
业务条线、管理条线、总经理、条线总、渠道总、部门总、科长、科员、数据分析岗等等
2、职务及角色的交叉,缺乏专业指导的教程及实践模块;
因为这个问题,我还特意请教了 帆软官方的服务,结果他扔给我了文档说明,毕竟是偏向于开发或运维方向的,我也是可以理解的;
说他自己也不是很懂后台管理权限这些模块,只能我自个研究了,然后呢,我自己慢慢琢磨~
3、当时的设想,也用SQL进行实现了效果:
使用系统参数 GETUSERJOBTITLES()【这个就是帆软系统自带的职务字段】、GETUSERDEPARTMENTS()【这个就是帆软系统自带的部门字段】
权限角色设置:系统功能模块相关
设置可以查阅的板块:管理系统——权限管理——角色——选择具体模块
权限职务设置:跟岗位相关
设置权限查阅数据范围,数据限制:用户管理——机构部门——部门列表——职务列表——用户列表
职务:
业务承保部门:业务总、业务数据、科室、业务员工(限制自身部门查阅)
承保管理部门:管理总、管理数据(可查阅全司数据)、管理员工
where 1=1
${if(len(trim(GETUSERJOBTITLES()))==0," and 1<>1 ","")}
${if(len(trim(GETUSERJOBTITLES()))>," and b.ks = '"+GETUSERJOBTITLES()+"'","")}
${if((trim(GETUSERJOBTITLES()))='业务总'," and b.bm = '"+GETUSERDEPARTMENTS()+"'"),""}
${if((trim(GETUSERJOBTITLES()))='业务数据'," and b.bm = '"+GETUSERDEPARTMENTS()+"'"),""}
${if((trim(GETUSERJOBTITLES()))='业务员工'," and b.ks = '"+GETUSERJOBTITLES()+"'","")}
${if((trim(GETUSERJOBTITLES()))='管理总'," and 1=1 ","")}
${if((trim(GETUSERJOBTITLES()))='管理数据'," and 1=1 ","")}
${if((trim(GETUSERJOBTITLES()))='管理员工'," and b.ks = '"+GETUSERJOBTITLES()+"'"),""}
结合以上存在的数据风险问题,确实解决了!
4、不足之处:
太麻烦了,特别的乱,而且 当时科室也是要一个一个创建在 帆软管理后台,导致业务结构经常的调整,维护这个也是头疼!维护成本过高!
而且因第一个版本,并不是我亲自参与设计,当时 留下来不少的bug,部门用简称,而且非业务部门竟然没有数据,把非业务部门 归类到了其它部门。
导致,非业务机构,比如财务部人员无法查询自身的业务及相关数据情况;
第三阶段:思考,解决之路!
1、根据以往的经验,也翻阅了很多帮助文档的材料,看到了很多用户管理同步的情况;
但是结合我司实际业务场景,比较不适用,而且比较麻烦,容易将原有的数据覆盖,为了保证数据稳定性,也不敢随意覆盖;
2、今天很认真的思考了一下,为了降低维护后台的成本,需尽量使用本地数据库的结构,随着数据库的更新而权限自动调整;
所以,也重新梳理了俩个模块:
模块一:业务机构,结合公司内部的部门管理,并在帆软后台设置职务:部门总、数据岗、科长、科员,根据本地数据库自带的权限,进行过滤即可;
【主要是解决了,任何人登录系统,根据本身的职务,都可以查阅自身权限内的部门、科室、经办的业务情况,更不会与所做的工作内容冲突】
with dc_bm as( select b.* from v_tb_bm b where b.经办代码='${fine_username}' ) select distinct b.经办姓名 from v_tb_bm b where 1=1 and b.部门代码 in(select 部门代码 from dc_bm ) ${if(len(trim(GETUSERJOBTITLES()))==0," and 1<>1 ","")} ${if((trim(GETUSERJOBTITLES()))='部门总'," and b.部门代码 in(select 部门代码 from dc_bm ) ","")} ${if((trim(GETUSERJOBTITLES()))='数据岗'," and b.部门代码 in(select 部门代码 from dc_bm ) ","")} ${if((trim(GETUSERJOBTITLES()))='科长'," and b.科室代码 in(select 科室代码 from dc_bm ) ","")} ${if((trim(GETUSERJOBTITLES()))='科员'," and b.经办代码 in(select 经办代码 from dc_bm ) ","")}
在设置模块的时候,遇到一个问题,寻求了朵拉老师的帮助,使用插件SQL完整的提示,才得以解决该问题:
这是未安装插件前的提示,其实并不知原因;
这个是安装插件后的效果,明显的知道原因,进行改进即可。
更加更重要的是有智能提示,对书写SQL提高了很多的效率,简单来说,谁用谁爽!
附上:高级数据库查询下载链接:https://market.fanruan.com/plugin/eddba555-72f9-45c2-b220-62ff4af70678
模块二:管理渠道,结合公司内部的管理渠道,设置不一样的角色,用角色定位,授予不一样的权限范围;
【针对渠道管理,这个问题主要是针对不同的管理部门,并不是以机构或科室为权限范围的情况下,而设置的角色定位】
未完待续!!!!
编辑于 2021-7-20 19:02
|