帆软管理平台的权限(部门、职务、角色)与数据权限问题的思考总结

楼主
让数据成为生产力!!!

 

第一阶段:结合实际业务场景的迫切需求,先用起来:

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
分享扩散:

沙发
发表于 2021-8-26 22:46:20 发布于APP客户端
老哥,我现在就是要通过部门过滤,一直报错,咋整
板凳
发表于 2021-8-27 17:31:02 发布于APP客户端
地板
发表于 2021-8-27 21:43:34

期待完整成功经验分享
5楼
发表于 2021-8-27 22:32:10

大胸弟,你们的帆软的组织结构是独立的么?还是其他系统集成过来的?我们也刚上bi,组织结构是从oa同步过来的,我们的数据涉及权限主要是产品档案、供应商档案以及采购订单档案。我的打算是搞一张中间表维护权限~具体实施还没想好~哈哈哈哈

6楼
发表于 2021-8-28 09:32:51
分享一个我们这边的案例
我们这边组织结构是oa同步过来,其实查询权限为部门时还好操作,我是拿着登录人的$fine_username信息,去oa的人员表查询对应部门,然后查出这个部门所有人员,将结果返回到帆软报表中复选框控件中,默认全选,再将人员复选框的控件带入sql结果集中,这样在用户操作的时候就可以实现勾选本部门的人员查出相应人的数据
还有一个恶心的权限是下级的数据只能被相应所有上级查询到,这个逻辑就比较复杂,直接用Java写的程序集,针对那些表结构设计的不好,人员又多的情况,万一来个大boss,别提又多慢,10000人+的规模,十几个职级,查到疯,无奈自己设计了几个表,用Java写了个定时同步计算数据,提前将人员下级归属数据算好,才达到boss要求,反正死也不想自己手动去维护这些数据,不然啥事也不用干了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

13回帖数 2关注人数 10534浏览人数
最后回复于:2021-9-8 06:00

返回顶部 返回列表