• Changelog

    本文档记录了 HZERO 1.0.2 中 服务、组件问题修复记录等。

    hzero-starter-parent

    hzero-boot-parent

    hzero-oauth

    1.0.2.RELEASE

    hzero-iam

    1.0.2.RELEASE [op|saas]

    升级指南

    影响分析

    升级至UI组件权限集控制的版本后,前端对所有页面具备组件控制的权限集做了强制控制,如果当前用户没有分配具备相关权限集的角色,则无法看到相关组件,比较直观的影响:各个租户内的页面无法看到已经被控制的相关按钮等组件,只有被分配了UI组件权限集才可看见该按钮等组件

    解决方案

    我们的假定是:某个角色分配了某个菜单的权限集,那么,预期正常情况下,UI组件的权限集应该也是一并分配下去的,因此,我们DataFix的依据就是,如果该角色分配了某个菜单权限,那么,我们也会修复,将该菜单下的UI组件权限集也一并分配给该角色;而创建标识继承标识取自已分配的菜单权限的相关标识。

    基础数据初始化

    1. 初始化种子数据,hzero-resource工程下/init-data/hzero-platform/iam/hzero-permission-comp.xlsx 以及 groovy/hzero_platform/hzero-iam/iam_menu.groovy

    将平台标准功能的UI组件权限集初始化至新环境的菜单下,例如,公告管理页面控制的新建按钮的权限集

    1. 调用iam接口/v1/init/init-ui-permission/refresh-menu刷新所有平台标准菜单下的UI组件权限集

    上一步骤中的基础数据分配至相关菜单下(以菜单路由为基准分配)

    1. 初始化内置角色UI组件权限集

    注意:不传参数,默认初始化内置五个角色: 平台管理员、租户管理员、项目管理员、租户管理员模板、游客(平台层)。 若需要初始化其他模板角色等模板可一并作为入参传入。

    1. 初始化继承角色权限树,此步骤主要处理继承自租户管理员模板的各个租户的租户管理员角色

    如上4个步骤其实就是平台标准功能权限数据初始化的流程,未来版本升级时,使用新版本的hzero-resource相关数据初始化即可。

    UI组件权限集DataFix流程(按需)

    对于项目上已经存在的相关角色,需要进一步DataFix,当然,也可以有租户管理员角色逐级分配,如下是提供的是便捷修复脚本,具体DataFix如下:

    – 1、首先找到Role-Menu-PermissionSet对应关系,通过ParentID去找权限集对应的菜单 – 此处排除掉5个内置角色(通过Excel初始化)以及租户管理员角色(从模板角色继承而来,跑继承API初始化即可)

    drop table  if exists datafix_role_menu;
    create table datafix_role_menu
    as select
    	ir.id role_id,
    	im_parent.id menu_id,
    	im_parent.type menu_type,
    	im.id permission_id,
    	im.type permission_type,
    	irp.h_create_flag,
    	irp.h_inherit_flag
    from iam_role ir
    join iam_role_permission irp on irp.role_id = ir.id
    join iam_menu im on im.id = irp.permission_id
    join iam_menu im_parent on im_parent.id = im.parent_id and im_parent.type in ('ps', 'menu')
    where ir.code not in (
    'role/site/default/administrator',
    'role/organization/default/administrator',
    'role/project/default/administrator',
    'role/site/default/guest',
    'role/organization/default/template/administrator'
    ) and ir.id not in (
    	select ta.id from iam_role ta
    	where ta.h_inherit_role_id in (select ta_parent.id from iam_role ta_parent where ta_parent.code = 'role/organization/default/template/administrator')
    );
    

    – 验证

    select * from datafix_role_menu;
    select * from datafix_role_menu where menu_type != 'menu';
    

    – 2、更新多层级PS的情况,例如,权限集存在树形结构,此处做一次修正

    update datafix_role_menu
    set menu_id = (
    		select im.id
    			 from iam_menu im
    			 where im.type = 'menu'
    			 and exists (
    					select 'x' from iam_menu im_inner
    					where im_inner.id = menu_id
    					and im_inner.type = menu_type
    					and im_inner.h_level_path like concat(im.h_level_path, '|%')
    				)
    ),
    menu_type = 'menu'
    where menu_type = 'ps';
    

    – 3、只取ROLE-MENU对应关系,为后续处理做准备

    drop table  if EXISTS datafix_role_menu_d;
    create table datafix_role_menu_d
    as select distinct role_id, menu_id, menu_type from datafix_role_menu;
    

    – 验证

    select * from datafix_role_menu_d;
    

    – 4、构造待插入数据,取当前角色未分配的控制类型非api的权限集(限制在角色-菜单对应关系之下)进行分配,h_create_flag/h_inherit_flag依据已分配权限集的情况而定

    drop table if exists datafix_role_ps_ins;
    create table datafix_role_ps_ins
    select dfd.role_id,
    			 im_ps.id permission_id,
    			 (
    				select 'Y' from dual
    				where exists (select 'x' from datafix_role_menu df_inner where df_inner.menu_id = dfd.menu_id and df_inner.role_id = dfd.role_id and df_inner.h_create_flag = 'Y')
    			 ) as h_create_flag,
    			 (
    				select 'Y' from dual
    				where exists (select 'x' from datafix_role_menu df_inner where df_inner.menu_id = dfd.menu_id and df_inner.role_id = dfd.role_id and df_inner.h_inherit_flag = 'Y')
    			 ) as h_inherit_flag
    from datafix_role_menu_d dfd
    join iam_menu im_ps on im_ps.parent_id = dfd.menu_id and im_ps.type = 'ps' and im_ps.h_permission_type != 'api'
    where not exists (
    	-- 排除已分配权限集
    	select 'x' from datafix_role_menu df where df.permission_id = im_ps.id and df.role_id = dfd.role_id and df.menu_id = dfd.menu_id
    );
    

    – 验证

    select * from datafix_role_ps_ins;
    

    – 5、实际写入

    INSERT INTO iam_role_permission ( role_id, permission_id, h_create_flag, h_inherit_flag )  SELECT
    ins.role_id,
    ins.permission_id,
    CASE
    
    		WHEN h_create_flag IS NULL THEN
    		'N' ELSE h_create_flag
    	END h_create_flag,
    CASE
    
    		WHEN h_inherit_flag IS NULL THEN
    		'N' ELSE h_inherit_flag
    	END h_inherit_flag
    FROM
    	datafix_role_ps_ins ins
    WHERE
    NOT EXISTS(
    	SELECT 1 FROM iam_role_permission irp
    	where irp.role_id = ins.role_id AND irp.permission_id = ins.permission_id AND irp.type = 'PS'
    );
    

    历史数据处理

    DataFix

    – 备份,确认此部分数据均是需要隐藏的权限组件

    create table datafix_role_ps_rek_1009 as
    SELECT
    	*
    FROM
    	iam_role_permission irp
    WHERE
    	irp.permission_id IN ( SELECT im.id FROM iam_menu im WHERE im.type = 'ps' AND im.h_permission_type != 'api' AND im.h_controller_type = 'hidden' );
    

    – 回收权限

    update iam_role_permission
    set h_create_flag = (
    		CASE WHEN h_create_flag = 'Y' THEN
    		'X' ELSE h_create_flag
    		END),
    		h_inherit_flag = (
    		CASE WHEN h_inherit_flag = 'Y' THEN
    		'X' ELSE h_inherit_flag
    		END)
    where id in (select bak.id from datafix_role_ps_rek_1009 as bak);
    

    – 更新hidden为null

    create table datafix_ps_hidden_1009 as
    SELECT * FROM iam_menu im WHERE im.type = 'ps' AND im.h_permission_type != 'api' AND im.h_controller_type = 'hidden';
    
    update iam_menu
    set h_controller_type = null
    where id in (select bak.id from datafix_ps_hidden_1009 as bak);
    

    hzero-platfrom

    1.0.2.RELEASE [op|saas]

    hzero-message

    1.0.2.RELEASE [op|saas]

    hzero-report

    1.0.1.RELEASE [op|saas]

    hzero-file

    1.0.2.RELEASE [op|saas]

    hzero-interface

    1.0.1.RELEASE [op|saas]

    hzero-workflow-plus

    1.0.2.RELEASE [op|saas] :

    前端版本

    时间:2019-10-11

    版本:1.0.2

    hzero-front

    1.0.2

    hzero-front-hiam

    1.0.2

    hzero-front-hmsg

    1.0.2

    hzero-front-hpfm

    1.0.2

    hzero-front-hwfp

    1.0.2

    hzero-front-himp

    1.0.2

    hzero-front-hsdr

    1.0.1

    hzero-front-hfile

    1.0.1

    hzero-front-hitf

    1.0.1

    hzero-front-hrpt

    1.0.1

    hzero-front-hnlp

    1.0.1

    hzero-front-hsgp

    1.0.1

    hzero-front-hdtt

    1.0.1