如何通过升级程序预置追加的表单-权限项

变更记录
| 产品版本 | 更新内容 | 更新日期 |
| V5.0.025 | 初始版本 | 2023/07/26 |
使用场景
业务实现过程中,给某个表单新增了权限项后,直接升级,那么原来拥有此表单的用户在升级之后,是没有新增权限项的权限的。本文旨在针对此种问题给出一种解决方案。
问题描述
表单业务角色(perm_busirole)原有权限项:引出、引入、新增、删除、查询、修改。

业务开展需要,后续要增加一个“分配”的权限项:

PS:表单设计器中,权限项的增加还是需要各自设置,保存表单设计时。
解决方法
权限组针对此此类问题,提供统一解决处理方案。
开发人员可新建一个自己的升级程序,示例如:
kd.bos.permission.servicehelper.AppendBusiRoleAssignPermItemUpgradeService(追加“业务角色”的“分配”权限项)

重点关注下参数含义。
/**
* 参数含义:Object[]{旧表单标识 , 旧表单的权限项, 需要新增的表单标识, 需要新增的权限项, new Long[]{三权分立时要授予权限的虚拟管理员}}。
* 目的1:如果原来有“perm_busirole”的“修改”权,那么追加“perm_busirole”的“分配”权
* 目的2:将 “perm_busirole”的“分配”权, 赋予 "三权分立"下的安全管理员
*/
private static List<Object[]> oldEntPerItem2NewMapList = Arrays.asList(new Object[]{"perm_busirole", kd.bos.consts.PermItemConst.ITEM_MODIFY, "perm_busirole", kd.bos.consts.PermItemConst.ITEM_ASSIGN,
new Long[]{PermApiConst.THREE_STRATEGY_3_SECURITY_ENTRYID}}
, new Object[]{});
每一个对象数组中有五个参数,按顺序代表:旧表单标识 、旧表单的权限项、需要新增的表单标识、需要新增的权限项、new Long[]{三权分立时要授予权限的虚拟管理员}。注意:旧表单所属应用需与新表单一致,且新旧表单都得是需要控权的表单,因为不控权的表单,不需要追加授权。
(“控制功能权限”开关打开了, 并且“操作权限控制”下面绑定了权限项, 则表示此表单要控权)

升级程序会根据“旧表单标识-权限项”在原有直接授权、通用角色授权、业务角色授权、管理员分组授权中系统服务云范围的情况,决定是否追加“新表单标识-权限项”。
第5个参数,由于“新表单标识-权限项”可能赋予到多个三权分立下的管理员类型,所以定义成Long[]。如果“新表单标识”不是系统服务云下的,此参数可设置为null。如果“新表单标识”是系统服务云下的,可使用cosmic账户登录平台基线a,业务基线PG测试新建库,系统服务云 - 基础服务 - 特殊管理员 - 权限控制策略,找到三权分立权限策略,点击查看详情,看看原来相应表单分配给了哪些管理员。本例中,“业务角色-修改” 只分配给了安全管理员,所以“业务角色-分配”只追加给安全管理员。


升级程序会按照“新表单标识-权限项”以及 “三权分立时要授予权限的虚拟管理员”,决定是否将“新表单标识-权限项”追加到相应的虚拟管理员权限
如何通过升级程序预置追加的表单-权限项
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



