Changelog
本文档记录了 HZERO 1.0.2 中 服务、组件问题修复记录等。
- 时间:2019-10-10
- hzero-parent: 1.0.2.RELEASE
hzero-starter-parent
- hzero-starter-core
1.0.2.RELEASE
:- 优化-短信验证码验证时返回错误次数及剩余次数
- hzero-starter-export
1.0.1.RELEASE
:- 修订-异步导出页数和页内行数参数错误的问题
- hzero-starter-integration-sdk
1.0.1.RELEASE
:- 修订-密码模式缺少客户端ID和客户端密码的问题
- hzero-starter-mybatis-mapper
1.0.2.RELEASE
:- 修订-多语言动态加载
hzero-boot-parent
- hzero-boot-import
1.0.2.RELEASE
:- 修订-导入客户端使用Oracle数据库时建表脚本错误
hzero-oauth
1.0.2.RELEASE
- 修订-单点登录域名所属租户限制,由租户ID强关联改为用户所属角色的租户均可访问
- 修订-登录页面支持多语言
- 优化-oauth登录密码错误或短信验证码错误返回错误次数及剩余次数
hzero-iam
1.0.2.RELEASE
[op|saas]
- 修订-接口字段删除后权限控制无法删除的问题
- 修订-用户信息初始化配置无效
- 修订-用户信息初始化从全量查询改为分页查询初始化
- 修订-租户创建异步问题
升级指南
影响分析
升级至UI组件权限集控制的版本后,前端对所有页面具备组件控制的权限集做了强制控制,如果当前用户没有分配具备相关权限集的角色,则无法看到相关组件,比较直观的影响:各个租户内的页面无法看到已经被控制的相关按钮等组件,只有被分配了UI组件权限集才可看见该按钮等组件
。
解决方案
- 将UI组件权限集初始化至新环境,并分配至相关菜单下
- 通过DataFix脚本,将权限集分配至各个已有角色中,这块具体的逻辑是:
我们的假定是:
某个角色分配了某个菜单的权限集,那么,预期正常情况下,UI组件的权限集应该也是一并分配下去的
,因此,我们DataFix的依据就是,如果该角色分配了某个菜单权限,那么,我们也会修复,将该菜单下的UI组件权限集也一并分配给该角色
;而创建标识
、继承标识
取自已分配的菜单权限的相关标识。
基础数据初始化
- 初始化种子数据,hzero-resource工程下
/init-data/hzero-platform/iam/hzero-permission-comp.xlsx
以及groovy/hzero_platform/hzero-iam/iam_menu.groovy
将平台标准功能的UI组件权限集初始化至新环境的菜单下,例如,公告管理页面控制的新建按钮的权限集
- 调用iam接口
/v1/init/init-ui-permission/refresh-menu
刷新所有平台标准菜单下的UI组件权限集
将
上一步骤
中的基础数据分配至相关菜单下(以菜单路由为基准分配)
- 初始化内置角色UI组件权限集
- 接口地址:/v1/init/init-ui-permission/role
- 入参: 需要初始化的角色编码
注意:不传参数,默认初始化内置五个角色: 平台管理员、租户管理员、项目管理员、租户管理员模板、游客(平台层)。 若需要初始化其他模板角色等模板可一并作为入参传入。
- 初始化继承角色权限树,此步骤主要处理
继承自租户管理员模板的各个租户的租户管理员角色
- 接口地址: /v1/init/inherited-role-permission-sets
- 入参: 需要初始化的角色编码(意义等同与步骤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'
);
历史数据处理
- 关于1.0.0及之前版本权限控制逻辑历史数据处理分析:
- 历史逻辑1:已分配角色权限集时,不做权限控制;此种情况无需处理,上述初始化将会覆盖
- 历史逻辑2-1:未分配角色权限集时,进行控制,如果
控制类型
为空?不存在此种情况,hidden
及disabled
二者必须择其一 - 历史逻辑2-2:未分配角色权限集时,进行控制,如果
控制类型
为disabled
,则禁用;此种情况无需处理,初始化时,未分配的非API类型权限集将会自动分配,而此时disabled
设置将会生效,新逻辑将会覆盖 - 历史逻辑2-3:未分配角色权限集时,进行控制,如果
控制类型
为hidden
,则隐藏;需要DataFix,此时,初始化时,未分配的非API类型权限集将会自动分配,而新逻辑中没有对hidden
进行处理,此处的DataFix参考1.0.1版本的DataFIX合并即可,做权限回收
- 关于1.0.1版本权限控制逻辑历史数据处理分析:
- 历史逻辑1:未分配角色权限集时,不做权限控制;此种情况无需处理,上述初始化将会覆盖
- 历史逻辑2-1:分配角色权限集时,进行控制,如果
控制类型
为空,则不做权限控制;此种情况无需处理,新逻辑已覆盖 - 历史逻辑2-2:分配角色权限集时,进行控制,如果
控制类型
为disabled
,则禁用;此种情况无需处理,新逻辑已覆盖 - 历史逻辑2-3:分配角色权限集时,进行控制,如果
控制类型
为hidden
,则隐藏;需要DataFix
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]
- 修订-文件服务百度云存储返回文件链接修改为https
- 修订-文件服务根据文件Key预览文件从重定向调整为内部调用(避免文件服务外网无法访问导致文件无法获取)
hzero-interface
1.0.1.RELEASE
[op|saas]
- 修订-密码模式缺少客户端ID和客户端密码的问题
hzero-workflow-plus
1.0.2.RELEASE
[op|saas]
:
- 修订-人工节点按钮配置保存后被重置的问题
前端版本
时间:2019-10-11
版本:1.0.2
hzero-front
1.0.2
- 优化 菜单加上 Tooltip 显示提示
- 优化 hzero-ui 升级到 1.0.72, 表格宽度固定,表头样式兼容
- 优化 权限组件(Permission)调整逻辑:
- 不分配权限时不显示UI组件
- 分配了权限后,如若设置了权限集的控制类型为禁用,则UI组件禁用,否则显示权限组件
- 优化 配置 choerodon-ui queryBar
- 优化 国际化完善
- 修复 models/global.js、services/api.js 国际化请求修复
- 修复 个人中心页签标题显示错误
- 修复 utils/menuTab 切换Tab(菜单) 报错的问题
- 修复 首页布局中出现的省略号样式问题
- 修复 choerodon-ui 样式修复
- 修复 utils/render operatorRender 方法调整
hzero-front-hiam
1.0.2
- 优化 菜单配置新建按钮权限组件调整,权限集添加权限类型字段,控制类型可清空
- 优化 角色管理添加控制类型字段
- 优化 国际化完善
hzero-front-hmsg
1.0.2
- 优化 国际化完善
- 优化 公告管理去除表格表单权限控制
hzero-front-hpfm
1.0.2
- 修复 弹性域bug
hzero-front-hwfp
1.0.2
- 优化 国际化完善
- 修复 服务定义查询表单参数错误
- 修复 流程单据lov参数查询错误
hzero-front-himp
1.0.2
- 优化 国际化完善
- 优化 通用导入删除同步接口
hzero-front-hsdr
1.0.1
- 优化 国际化完善
- 修复 调度任务日志中日志文件接口错误
hzero-front-hfile
1.0.1
- 优化 国际化完善
- 修复 文件存储配置默认租户问题
hzero-front-hitf
1.0.1
- 优化 国际化完善
- 优化 服务注册: 服务认证配置在OAUTH2认证模式,及PASSWORD授权模式下,可配置客户端ID及其密钥
hzero-front-hrpt
1.0.1
- 优化 国际化完善
hzero-front-hnlp
1.0.1
- 优化 国际化完善
hzero-front-hsgp
1.0.1
- 优化 国际化完善
hzero-front-hdtt
1.0.1
- 优化 国际化完善