From edd1c15806ce4b2643f79b9e0ff4816c6745c242 Mon Sep 17 00:00:00 2001 From: junjie Date: Thu, 29 Jul 2021 17:34:43 +0800 Subject: [PATCH 1/5] =?UTF-8?q?refactor:=20=E8=A7=86=E5=9B=BE=E5=9D=90?= =?UTF-8?q?=E6=A0=87=E8=BD=B4=E6=A0=87=E7=AD=BE=E8=A7=92=E5=BA=A6=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=BD=8D=E7=BD=AE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/lang/en.js | 3 ++- frontend/src/lang/tw.js | 3 ++- frontend/src/lang/zh.js | 3 ++- .../chart/components/component-style/XAxisSelector.vue | 8 ++++---- .../chart/components/component-style/YAxisSelector.vue | 8 ++++---- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 6708d15e1d..d8009c7b9b 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -817,7 +817,8 @@ export default { drag_block_funnel_width: 'Funnel Width', drag_block_funnel_split: 'Funnel Split', drag_block_radar_length: 'Branch Length', - drag_block_radar_label: 'Branch Label' + drag_block_radar_label: 'Branch Label', + axis_label_rotate: 'Label Rotate' }, dataset: { sheet_warn: 'There are multiple sheet pages, and the first one is extracted by default', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 13f17fbb5b..480e86f94c 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -817,7 +817,8 @@ export default { drag_block_funnel_width: '漏鬥層寬', drag_block_funnel_split: '漏鬥分層', drag_block_radar_length: '分支長度', - drag_block_radar_label: '分支標簽' + drag_block_radar_label: '分支標簽', + axis_label_rotate: '標簽角度' }, dataset: { sheet_warn: '有多個sheet頁面,默認抽取第一個', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 3f0e2de8fe..95fa5f3ae2 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -817,7 +817,8 @@ export default { drag_block_funnel_width: '漏斗层宽', drag_block_funnel_split: '漏斗分层', drag_block_radar_length: '分支长度', - drag_block_radar_label: '分支标签' + drag_block_radar_label: '分支标签', + axis_label_rotate: '标签角度' }, dataset: { sheet_warn: '有多个 Sheet 页,默认抽取第一个', diff --git a/frontend/src/views/chart/components/component-style/XAxisSelector.vue b/frontend/src/views/chart/components/component-style/XAxisSelector.vue index 65d88477f8..76648397c1 100644 --- a/frontend/src/views/chart/components/component-style/XAxisSelector.vue +++ b/frontend/src/views/chart/components/component-style/XAxisSelector.vue @@ -21,9 +21,6 @@ - - - @@ -59,7 +56,10 @@ - + + + + diff --git a/frontend/src/views/chart/components/component-style/YAxisSelector.vue b/frontend/src/views/chart/components/component-style/YAxisSelector.vue index fd5765705f..4aebe4c68c 100644 --- a/frontend/src/views/chart/components/component-style/YAxisSelector.vue +++ b/frontend/src/views/chart/components/component-style/YAxisSelector.vue @@ -21,9 +21,6 @@ - - - @@ -59,7 +56,10 @@ - + + + + From 92f795aa500aca817ac3def01be2dc1f8587b646 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 29 Jul 2021 17:59:31 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20=E6=B6=88=E6=81=AF=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E5=88=B0=E6=97=A0=E6=9D=83=E9=99=90=E8=B7=AF=E7=94=B1=EF=BC=8C?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=A9=BA=E7=99=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/Notification/index.vue | 19 +++++++++++--- frontend/src/lang/en.js | 1 + frontend/src/lang/tw.js | 1 + frontend/src/lang/zh.js | 1 + frontend/src/views/msg/all.vue | 23 ++++++++++++++-- frontend/src/views/msg/readed.vue | 22 +++++++++++++++- frontend/src/views/msg/unread.vue | 26 ++++++++++++++++--- 7 files changed, 84 insertions(+), 9 deletions(-) diff --git a/frontend/src/components/Notification/index.vue b/frontend/src/components/Notification/index.vue index abb9559ffc..e295018421 100644 --- a/frontend/src/components/Notification/index.vue +++ b/frontend/src/components/Notification/index.vue @@ -120,17 +120,30 @@ export default { if (this.$route && this.$route.name && this.$route.name === row.router) { // 如果当前路由就是目标路由 那么使用router.push页面不会刷新 这时候要使用事件方式 row.callback && bus.$emit(row.callback, param) + row.status || this.setReaded(row.msgId) } else { - this.$router.push({ name: row.router, params: param }) + if (this.hasPermissionRoute(row.router)) { + this.$router.push({ name: row.router, params: param }) + row.status || this.setReaded(row.msgId) + return + } + this.$warning(this.$t('commons.no_target_permission')) } - - row.status || this.setReaded(row.msgId) }, remove(row) { }, msgSetting() { + }, + hasPermissionRoute(name, permission_routes) { + permission_routes = permission_routes || this.permission_routes + for (let index = 0; index < permission_routes.length; index++) { + const route = permission_routes[index] + if (route.name && route.name === name) return true + if (route.children && this.hasPermissionRoute(name, route.children)) return true + } + return false }, showMore() { const routerName = 'sys-msg-web-all' diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index c7a985f196..be4b47c09f 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -129,6 +129,7 @@ export default { password_error: 'The password can not be less than 8 digits' }, commons: { + no_target_permission: 'No permission', success: 'Success', switch_lang: 'Switch Language Success', close: 'Close', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index fcf513b6aa..660923e266 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -129,6 +129,7 @@ export default { password_error: '密碼不小於 8 位' }, commons: { + no_target_permission: '沒有權限', success: '成功', switch_lang: '切換語言成功', close: '關閉', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index b019971f5a..db2b633ce8 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -129,6 +129,7 @@ export default { password_error: '密码不小于 8 位' }, commons: { + no_target_permission: '没有权限', success: '成功', switch_lang: '切换语言成功', close: '关闭', diff --git a/frontend/src/views/msg/all.vue b/frontend/src/views/msg/all.vue index 51ab3dd58b..6d98a09703 100644 --- a/frontend/src/views/msg/all.vue +++ b/frontend/src/views/msg/all.vue @@ -55,6 +55,7 @@ import { query, updateStatus } from '@/api/system/msg' import { msgTypes, getTypeName, loadMsgTypes } from '@/utils/webMsg' import bus from '@/utils/bus' import { addOrder, formatOrders } from '@/utils/index' +import { mapGetters } from 'vuex' export default { components: { LayoutContent, @@ -82,6 +83,11 @@ export default { orderConditions: [] } }, + computed: { + ...mapGetters([ + 'permission_routes' + ]) + }, mounted() { this.search() }, @@ -120,8 +126,21 @@ export default { }, toDetail(row) { const param = { ...{ msgNotification: true, msgType: row.typeId, sourceParam: row.param }} - this.$router.push({ name: row.router, params: param }) - row.status || this.setReaded(row) + if (this.hasPermissionRoute(row.router)) { + this.$router.push({ name: row.router, params: param }) + row.status || this.setReaded(row) + return + } + this.$warning(this.$t('commons.no_target_permission')) + }, + hasPermissionRoute(name, permission_routes) { + permission_routes = permission_routes || this.permission_routes + for (let index = 0; index < permission_routes.length; index++) { + const route = permission_routes[index] + if (route.name && route.name === name) return true + if (route.children && this.hasPermissionRoute(name, route.children)) return true + } + return false }, // 设置已读 setReaded(row) { diff --git a/frontend/src/views/msg/readed.vue b/frontend/src/views/msg/readed.vue index bddc2e0f89..0866f44f88 100644 --- a/frontend/src/views/msg/readed.vue +++ b/frontend/src/views/msg/readed.vue @@ -60,6 +60,7 @@ import ComplexTable from '@/components/business/complex-table' import { query } from '@/api/system/msg' import { msgTypes, getTypeName, loadMsgTypes } from '@/utils/webMsg' import { addOrder, formatOrders } from '@/utils/index' +import { mapGetters } from 'vuex' export default { components: { LayoutContent, @@ -87,6 +88,11 @@ export default { } } }, + computed: { + ...mapGetters([ + 'permission_routes' + ]) + }, mounted() { this.search() }, @@ -125,7 +131,21 @@ export default { }, toDetail(row) { const param = { ...{ msgNotification: true, msgType: row.typeId, sourceParam: row.param }} - this.$router.push({ name: row.router, params: param }) + // this.$router.push({ name: row.router, params: param }) + if (this.hasPermissionRoute(row.router)) { + this.$router.push({ name: row.router, params: param }) + return + } + this.$warning(this.$t('commons.no_target_permission')) + }, + hasPermissionRoute(name, permission_routes) { + permission_routes = permission_routes || this.permission_routes + for (let index = 0; index < permission_routes.length; index++) { + const route = permission_routes[index] + if (route.name && route.name === name) return true + if (route.children && this.hasPermissionRoute(name, route.children)) return true + } + return false }, sortChange({ column, prop, order }) { this.orderConditions = [] diff --git a/frontend/src/views/msg/unread.vue b/frontend/src/views/msg/unread.vue index 60f0a30eee..60b8c81c54 100644 --- a/frontend/src/views/msg/unread.vue +++ b/frontend/src/views/msg/unread.vue @@ -65,7 +65,7 @@ import { query, updateStatus, batchRead } from '@/api/system/msg' import { msgTypes, getTypeName, loadMsgTypes } from '@/utils/webMsg' import bus from '@/utils/bus' import { addOrder, formatOrders } from '@/utils/index' - +import { mapGetters } from 'vuex' export default { components: { LayoutContent, @@ -98,6 +98,11 @@ export default { orderConditions: [] } }, + computed: { + ...mapGetters([ + 'permission_routes' + ]) + }, mounted() { this.search() }, @@ -136,8 +141,23 @@ export default { }, toDetail(row) { const param = { ...{ msgNotification: true, msgType: row.typeId, sourceParam: row.param }} - this.$router.push({ name: row.router, params: param }) - this.setReaded(row) + // this.$router.push({ name: row.router, params: param }) + // this.setReaded(row) + if (this.hasPermissionRoute(row.router)) { + this.$router.push({ name: row.router, params: param }) + this.setReaded(row) + return + } + this.$warning(this.$t('commons.no_target_permission')) + }, + hasPermissionRoute(name, permission_routes) { + permission_routes = permission_routes || this.permission_routes + for (let index = 0; index < permission_routes.length; index++) { + const route = permission_routes[index] + if (route.name && route.name === name) return true + if (route.children && this.hasPermissionRoute(name, route.children)) return true + } + return false }, // 设置已读 setReaded(row) { From 91f058ea6ae70041b9940258fee01046c207fb3a Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Thu, 29 Jul 2021 18:00:07 +0800 Subject: [PATCH 3/5] =?UTF-8?q?refactor:=E4=BB=AA=E8=A1=A8=E6=9D=BF?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E9=99=90=E5=88=B6=E5=9C=A850=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E5=86=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/panel/list/EditPanel/index.vue | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frontend/src/views/panel/list/EditPanel/index.vue b/frontend/src/views/panel/list/EditPanel/index.vue index 636938ee42..8fbf95e05a 100644 --- a/frontend/src/views/panel/list/EditPanel/index.vue +++ b/frontend/src/views/panel/list/EditPanel/index.vue @@ -134,6 +134,13 @@ export default { this.$warning(this.$t('chart.name_can_not_empty')) return false } + + debugger + if (this.editPanel.panelInfo.name.length > 50) { + this.$warning(this.$t('commons.char_can_not_more_50')) + return false + } + if (!this.editPanel.panelInfo.panelData && this.editPanel.optType === 'new' && this.inputType === 'copy') { this.$warning(this.$t('chart.template_can_not_empty')) return false From 54167ab2545b37f3c765596d1f62837fbc7d067a Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 29 Jul 2021 16:46:17 +0800 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20=E6=9F=A5=E7=9C=8B=E5=88=86?= =?UTF-8?q?=E4=BA=AB=E9=93=BE=E6=8E=A5=E4=BD=BF=E7=94=A8=E7=8B=AC=E7=AB=8B?= =?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/auth/config/ShiroConfig.java | 1 + .../dataease/auth/filter/F2CLinkFilter.java | 51 +++++++++++++++++++ .../auth/service/impl/ShiroServiceImpl.java | 10 +++- .../java/io/dataease/auth/util/LinkUtil.java | 22 ++++++++ .../controller/panel/api/LinkApi.java | 9 ++++ .../controller/panel/server/LinkServer.java | 17 +++++++ .../service/panel/PanelLinkService.java | 21 +++++++- frontend/src/api/link/index.js | 14 ++++- .../canvas/custom-component/UserView.vue | 16 ++++-- frontend/src/utils/request.js | 4 +- frontend/src/views/link/pwd/index.vue | 21 +++++++- 11 files changed, 172 insertions(+), 14 deletions(-) create mode 100644 backend/src/main/java/io/dataease/auth/filter/F2CLinkFilter.java create mode 100644 backend/src/main/java/io/dataease/auth/util/LinkUtil.java diff --git a/backend/src/main/java/io/dataease/auth/config/ShiroConfig.java b/backend/src/main/java/io/dataease/auth/config/ShiroConfig.java index 8e32c44079..a3d6e190de 100644 --- a/backend/src/main/java/io/dataease/auth/config/ShiroConfig.java +++ b/backend/src/main/java/io/dataease/auth/config/ShiroConfig.java @@ -50,6 +50,7 @@ public class ShiroConfig { filterMap.put("f2cPerms", new F2CPermissionsFilter()); filterMap.put("jwt", new JWTFilter()); filterMap.put("logout", new F2CLogoutFilter()); + filterMap.put("link", new F2CLinkFilter()); factoryBean.setSecurityManager(securityManager); factoryBean.setLoginUrl("/login"); factoryBean.setUnauthorizedUrl("/login"); diff --git a/backend/src/main/java/io/dataease/auth/filter/F2CLinkFilter.java b/backend/src/main/java/io/dataease/auth/filter/F2CLinkFilter.java new file mode 100644 index 0000000000..8cca8edbf7 --- /dev/null +++ b/backend/src/main/java/io/dataease/auth/filter/F2CLinkFilter.java @@ -0,0 +1,51 @@ +package io.dataease.auth.filter; + +import cn.hutool.core.util.ObjectUtil; +import com.auth0.jwt.JWT; +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; +import io.dataease.auth.config.RsaProperties; +import io.dataease.auth.util.JWTUtils; +import io.dataease.auth.util.LinkUtil; +import io.dataease.auth.util.RsaUtil; +import io.dataease.base.domain.PanelLink; +import io.dataease.commons.utils.LogUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.web.filter.authc.AnonymousFilter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; + +public class F2CLinkFilter extends AnonymousFilter { + + private static final Logger logger = LoggerFactory.getLogger(F2CLogoutFilter.class); + + private static final String LINK_TOKEN_KEY = "LINK-PWD-TOKEN"; + + @Override + protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) { + try{ + HttpServletRequest req = (HttpServletRequest) request; + String link_token = req.getHeader(LINK_TOKEN_KEY); + DecodedJWT jwt = JWT.decode(link_token); + Claim resourceId = jwt.getClaim("resourceId"); + String id = resourceId.asString(); + PanelLink panelLink = LinkUtil.queryLink(id); + if (ObjectUtil.isEmpty(panelLink)) return false; + if (!panelLink.getEnablePwd()) { + panelLink.setPwd("dataease"); + } + return JWTUtils.verifyLink(link_token, id, RsaUtil.decryptByPrivateKey(RsaProperties.privateKey, panelLink.getPwd())); + }catch (Exception e) { + LogUtil.error(e); + } + return false; + + } + + + + +} diff --git a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java index 954a6f7266..0298899473 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java @@ -41,8 +41,7 @@ public class ShiroServiceImpl implements ShiroService { //验证链接 filterChainDefinitionMap.put("/api/link/validate**", ANON); - filterChainDefinitionMap.put("/panel/group/findOne/**", ANON); - filterChainDefinitionMap.put("/chart/view/getData/**", ANON); + filterChainDefinitionMap.put("/system/ui/**", ANON); @@ -59,9 +58,16 @@ public class ShiroServiceImpl implements ShiroService { filterChainDefinitionMap.put("/tokenExpired", ANON); filterChainDefinitionMap.put("/downline", ANON); filterChainDefinitionMap.put("/common-files/**", ANON); + filterChainDefinitionMap.put("/api/auth/logout", "logout"); + + filterChainDefinitionMap.put("/api/link/resourceDetail/**", "link"); + filterChainDefinitionMap.put("/api/link/viewDetail/**", "link"); + filterChainDefinitionMap.put("/**", "authc"); + filterChainDefinitionMap.put("/**", "jwt"); + return filterChainDefinitionMap; } diff --git a/backend/src/main/java/io/dataease/auth/util/LinkUtil.java b/backend/src/main/java/io/dataease/auth/util/LinkUtil.java new file mode 100644 index 0000000000..df29abc08a --- /dev/null +++ b/backend/src/main/java/io/dataease/auth/util/LinkUtil.java @@ -0,0 +1,22 @@ +package io.dataease.auth.util; + +import io.dataease.base.domain.PanelLink; +import io.dataease.service.panel.PanelLinkService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class LinkUtil { + + + private static PanelLinkService panelLinkService; + + @Autowired + public void setPanelLinkService(PanelLinkService panelLinkService) { + LinkUtil.panelLinkService = panelLinkService; + } + + public static PanelLink queryLink(String resourceId) { + return panelLinkService.findOne(resourceId); + } +} diff --git a/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java b/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java index a58c407bf8..3508368537 100644 --- a/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java +++ b/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java @@ -1,6 +1,7 @@ package io.dataease.controller.panel.api; +import io.dataease.controller.request.chart.ChartExtRequest; import io.dataease.controller.request.panel.link.EnablePwdRequest; import io.dataease.controller.request.panel.link.LinkRequest; import io.dataease.controller.request.panel.link.PasswordRequest; @@ -40,4 +41,12 @@ public interface LinkApi { @ApiOperation("验证密码") @PostMapping("/validatePwd") boolean validatePwd(PasswordRequest request) throws Exception; + + @ApiOperation("资源详息") + @PostMapping("/resourceDetail/{resourceId}") + Object resourceDetail(@PathVariable String resourceId); + + @ApiOperation("视图详息") + @PostMapping("/viewDetail/{viewId}") + Object viewDetail(@PathVariable String viewId, @RequestBody ChartExtRequest requestList) throws Exception; } diff --git a/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java b/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java index 8a1734cd82..8931451652 100644 --- a/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java +++ b/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java @@ -4,18 +4,22 @@ package io.dataease.controller.panel.server; import com.google.gson.Gson; import io.dataease.base.domain.PanelLink; import io.dataease.controller.panel.api.LinkApi; +import io.dataease.controller.request.chart.ChartExtRequest; import io.dataease.controller.request.panel.link.EnablePwdRequest; import io.dataease.controller.request.panel.link.LinkRequest; import io.dataease.controller.request.panel.link.PasswordRequest; import io.dataease.controller.request.panel.link.ValidateRequest; import io.dataease.dto.panel.link.GenerateDto; import io.dataease.dto.panel.link.ValidateDto; +import io.dataease.service.chart.ChartViewService; import io.dataease.service.panel.PanelLinkService; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; import java.util.Map; @@ -27,6 +31,9 @@ public class LinkServer implements LinkApi { @Autowired private PanelLinkService panelLinkService; + @Resource + private ChartViewService chartViewService; + @Override public void replacePwd(@RequestBody PasswordRequest request) { @@ -73,4 +80,14 @@ public class LinkServer implements LinkApi { public boolean validatePwd(@RequestBody PasswordRequest request) throws Exception { return panelLinkService.validatePwd(request); } + + @Override + public Object resourceDetail(@PathVariable String resourceId) { + return panelLinkService.resourceInfo(resourceId); + } + + @Override + public Object viewDetail(String viewId, ChartExtRequest requestList) throws Exception{ + return chartViewService.getData(viewId, requestList); + } } diff --git a/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java b/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java index 53109c5b2d..9d6c9b1ab5 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java @@ -4,7 +4,9 @@ import com.google.gson.Gson; import io.dataease.auth.config.RsaProperties; import io.dataease.auth.util.JWTUtils; import io.dataease.auth.util.RsaUtil; +import io.dataease.base.domain.PanelGroupWithBLOBs; import io.dataease.base.domain.PanelLink; +import io.dataease.base.mapper.PanelGroupMapper; import io.dataease.base.mapper.PanelLinkMapper; import io.dataease.commons.utils.ServletUtils; import io.dataease.controller.request.panel.link.EnablePwdRequest; @@ -32,6 +34,9 @@ public class PanelLinkService { @Resource private PanelLinkMapper mapper; + @Resource + private PanelGroupMapper panelGroupMapper; + public void changeValid(LinkRequest request){ PanelLink po = new PanelLink(); po.setResourceId(request.getResourceId()); @@ -117,7 +122,16 @@ public class PanelLinkService { public Boolean validateHeads(PanelLink panelLink) throws Exception{ HttpServletRequest request = ServletUtils.request(); String token = request.getHeader("LINK-PWD-TOKEN"); - if (StringUtils.isEmpty(token) || StringUtils.equals("undefined", token) || StringUtils.equals("null", token)) return false; + if (!panelLink.getEnablePwd() || StringUtils.isEmpty(token) || StringUtils.equals("undefined", token) || StringUtils.equals("null", token)) { + String resourceId = panelLink.getResourceId(); + String pwd = "dataease"; + String tk = JWTUtils.signLink(resourceId, pwd); + HttpServletResponse httpServletResponse = ServletUtils.response(); + httpServletResponse.addHeader("Access-Control-Expose-Headers", "LINK-PWD-TOKEN"); + httpServletResponse.setHeader("LINK-PWD-TOKEN", tk); + return false; + } + if (StringUtils.isEmpty(panelLink.getPwd())) return false; boolean verify = JWTUtils.verifyLink(token, panelLink.getResourceId(), decryptParam(panelLink.getPwd())); return verify; } @@ -137,4 +151,9 @@ public class PanelLinkService { return pass; } + public PanelGroupWithBLOBs resourceInfo(String resourceId) { + return panelGroupMapper.selectByPrimaryKey(resourceId); + } + + } diff --git a/frontend/src/api/link/index.js b/frontend/src/api/link/index.js index 57b5e1933d..93cdcf568b 100644 --- a/frontend/src/api/link/index.js +++ b/frontend/src/api/link/index.js @@ -51,7 +51,17 @@ export function loadGenerate(resourceId) { export function loadResource(resourceId) { return request({ - url: 'panel/group/findOne/' + resourceId, - method: 'get' + url: 'api/link/resourceDetail/' + resourceId, + method: 'post' + }) +} + +export function viewInfo(id, data) { + return request({ + url: 'api/link/viewDetail/' + id, + method: 'post', + timeout: 30000, + hideMsg: true, + data }) } diff --git a/frontend/src/components/canvas/custom-component/UserView.vue b/frontend/src/components/canvas/custom-component/UserView.vue index f280c142c1..1b1efa03dc 100644 --- a/frontend/src/components/canvas/custom-component/UserView.vue +++ b/frontend/src/components/canvas/custom-component/UserView.vue @@ -25,10 +25,10 @@