From ee5e4ac0550bed3f125b478f449d79a648872f5e Mon Sep 17 00:00:00 2001 From: junjie Date: Thu, 3 Jun 2021 12:30:50 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat(fix):=E5=88=A0=E9=99=A4=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9B=86=EF=BC=8C=E5=90=8C=E6=97=B6=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=85=B3=E8=81=94=E8=A7=86=E5=9B=BE=E7=9A=84=E5=85=B3=E8=81=94?= =?UTF-8?q?=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dataset/DataSetTableService.java | 21 +++++++++++-------- .../dataset/DataSetTableUnionService.java | 8 +++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 29d8d1b884..65fe75a13d 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -132,6 +132,8 @@ public class DataSetTableService { dataSetTableFieldsService.deleteByTableId(id); // 删除同步任务 dataSetTableTaskService.deleteByTableId(id); + // 删除关联关系 + dataSetTableUnionService.deleteUnionByTableId(id); try { deleteDorisTable(id, table); } catch (Exception e) { @@ -359,7 +361,7 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); String sql = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class).getSql(); // 使用输入的sql先预执行一次,并拿到所有字段 - if(StringUtils.isEmpty(sql)){ + if (StringUtils.isEmpty(sql)) { throw new Exception(Translator.get("i18n_sql_not_empty")); } datasourceRequest.setQuery(sql); @@ -874,14 +876,15 @@ public class DataSetTableService { } public Boolean checkDorisTableIsExists(String id) throws Exception { - Datasource dorisDatasource = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); - JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); - DatasourceRequest datasourceRequest = new DatasourceRequest(); - datasourceRequest.setDatasource(dorisDatasource); - QueryProvider qp = ProviderFactory.getQueryProvider(dorisDatasource.getType()); - datasourceRequest.setQuery(qp.searchTable(DorisTableUtils.dorisName(id))); - List data = jdbcProvider.getData(datasourceRequest); - return CollectionUtils.isNotEmpty(data); +// Datasource dorisDatasource = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); +// JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); +// DatasourceRequest datasourceRequest = new DatasourceRequest(); +// datasourceRequest.setDatasource(dorisDatasource); +// QueryProvider qp = ProviderFactory.getQueryProvider(dorisDatasource.getType()); +// datasourceRequest.setQuery(qp.searchTable(DorisTableUtils.dorisName(id))); +// List data = jdbcProvider.getData(datasourceRequest); +// return CollectionUtils.isNotEmpty(data); + return true; } @Resource diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java index 9ee96a51ce..9eb4fd1503 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java @@ -76,6 +76,14 @@ public class DataSetTableUnionService { return sourceList; } + public void deleteUnionByTableId(String tableId) { + DatasetTableUnionExample datasetTableUnionExample = new DatasetTableUnionExample(); + DatasetTableUnionExample.Criteria criteriaSource = datasetTableUnionExample.createCriteria().andSourceTableIdEqualTo(tableId); + DatasetTableUnionExample.Criteria criteriaTarget = datasetTableUnionExample.createCriteria().andTargetTableIdEqualTo(tableId); + datasetTableUnionExample.or(criteriaTarget); + datasetTableUnionMapper.deleteByExample(datasetTableUnionExample); + } + private void checkUnion(DatasetTableUnion datasetTableUnion) { // check 关联关系是否存在 DatasetTableUnionExample datasetTableUnionExample = new DatasetTableUnionExample(); From 180c56f2938529447ddbcc6748bb52efe7c1618b Mon Sep 17 00:00:00 2001 From: junjie Date: Thu, 3 Jun 2021 12:40:54 +0800 Subject: [PATCH 2/7] feat(fix):rollback --- .../service/dataset/DataSetTableService.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 65fe75a13d..0b57ac3677 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -876,15 +876,14 @@ public class DataSetTableService { } public Boolean checkDorisTableIsExists(String id) throws Exception { -// Datasource dorisDatasource = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); -// JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); -// DatasourceRequest datasourceRequest = new DatasourceRequest(); -// datasourceRequest.setDatasource(dorisDatasource); -// QueryProvider qp = ProviderFactory.getQueryProvider(dorisDatasource.getType()); -// datasourceRequest.setQuery(qp.searchTable(DorisTableUtils.dorisName(id))); -// List data = jdbcProvider.getData(datasourceRequest); -// return CollectionUtils.isNotEmpty(data); - return true; + Datasource dorisDatasource = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); + JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(dorisDatasource); + QueryProvider qp = ProviderFactory.getQueryProvider(dorisDatasource.getType()); + datasourceRequest.setQuery(qp.searchTable(DorisTableUtils.dorisName(id))); + List data = jdbcProvider.getData(datasourceRequest); + return CollectionUtils.isNotEmpty(data); } @Resource From ca8b10bc131657d221c2a58cedd1e7a46c14422d Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 3 Jun 2021 13:07:44 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E7=94=B1=E4=BA=8E?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E8=BF=87=E6=9C=9F=E5=AF=BC=E8=87=B4=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=B6=85=E6=97=B6=E5=A4=B1=E6=95=88=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/auth/filter/JWTFilter.java | 1 - .../java/io/dataease/auth/util/JWTUtils.java | 13 ++---- .../src/main/resources/ehcache/ehcache.xml | 42 +++++++++---------- 3 files changed, 24 insertions(+), 32 deletions(-) diff --git a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java index 4729dcb089..768acc42dd 100644 --- a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java +++ b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java @@ -6,7 +6,6 @@ import io.dataease.auth.entity.TokenInfo; import io.dataease.auth.service.AuthUserService; import io.dataease.auth.util.JWTUtils; import io.dataease.commons.utils.CommonBeanFactory; -import io.dataease.commons.utils.ServletUtils; import io.dataease.i18n.Translator; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authc.AuthenticationException; diff --git a/backend/src/main/java/io/dataease/auth/util/JWTUtils.java b/backend/src/main/java/io/dataease/auth/util/JWTUtils.java index f751689c6e..e71b2ab696 100644 --- a/backend/src/main/java/io/dataease/auth/util/JWTUtils.java +++ b/backend/src/main/java/io/dataease/auth/util/JWTUtils.java @@ -84,24 +84,17 @@ public class JWTUtils { */ public static boolean loginExpire(String token){ if (Login_Interval==0) { - String property = CommonBeanFactory.getBean(Environment.class).getProperty("dataease.login_timeout"); - // 默认超时时间是8h - int minute = StringUtils.isNotEmpty(property) ? Integer.parseInt(property): (8*60); + int minute = CommonBeanFactory.getBean(Environment.class).getProperty("dataease.login_timeout", Integer.class, 8*60); // 分钟换算成毫秒 Login_Interval = minute * 1000 * 60; } Long now = System.currentTimeMillis(); Long lastOperateTime = tokenLastOperateTime(token); + if (ObjectUtils.isEmpty(lastOperateTime)) return true; boolean isExpire = false; if (lastOperateTime != null) { isExpire = now - lastOperateTime > Login_Interval; } - if (isExpire) { -// System.out.println("-----------------------"); -// System.out.println("-----上次操作时间是["+lastOperateTime+"]-----"); -// System.out.println("-----当前操作时间是["+now+"]-----"); -// System.out.println("-----------------------"); - } return isExpire; } @@ -116,7 +109,7 @@ public class JWTUtils { } /** - * 生成签名,5min后过期 + * 生成签名,1min后过期 * @param tokenInfo 用户信息 * @param secret 用户的密码 * @return 加密的token diff --git a/backend/src/main/resources/ehcache/ehcache.xml b/backend/src/main/resources/ehcache/ehcache.xml index ff551ec033..82848300e9 100644 --- a/backend/src/main/resources/ehcache/ehcache.xml +++ b/backend/src/main/resources/ehcache/ehcache.xml @@ -29,7 +29,7 @@ From 140daca102290a51faf899e370d4be1807e5f3f6 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 3 Jun 2021 13:38:30 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=88=86=E9=A1=B5=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/mapper/ext/ExtSysUserMapper.xml | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysUserMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysUserMapper.xml index a74e5045ff..2c1798644d 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysUserMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysUserMapper.xml @@ -21,18 +21,21 @@ - - - + + + + + From 8e61d2eaee7feb3a3feadf5a12d63872b2f20eeb Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Thu, 3 Jun 2021 14:01:18 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20=E8=8F=9C=E5=8D=95=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E7=AE=A1=E7=90=86=E6=95=B4=E5=90=88=E5=88=B0=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AE=A1=E7=90=86=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AuthUserServiceImpl.java | 38 ++++++++++---- .../dataease/base/mapper/ext/AuthMapper.java | 3 ++ .../dataease/base/mapper/ext/AuthMapper.xml | 51 +++++++++++++------ .../mapper/ext/ExtPluginSysMenuMapper.java | 15 ++++++ .../mapper/ext/ExtPluginSysMenuMapper.xml | 17 +++++++ .../base/mapper/ext/ExtSysAuthMapper.java | 4 +- .../base/mapper/ext/ExtSysAuthMapper.xml | 18 +++---- .../base/mapper/ext/ExtVAuthModelMapper.java | 1 + .../base/mapper/ext/ExtVAuthModelMapper.xml | 8 +-- .../commons/constants/SystemConstants.java | 5 ++ .../controller/sys/SysAuthController.java | 3 +- .../io/dataease/dto/SysAuthDetailDTO.java | 20 ++++++++ .../dataease/service/sys/SysAuthService.java | 50 +++++++++--------- 13 files changed, 167 insertions(+), 66 deletions(-) create mode 100644 backend/src/main/java/io/dataease/base/mapper/ext/ExtPluginSysMenuMapper.java create mode 100644 backend/src/main/java/io/dataease/base/mapper/ext/ExtPluginSysMenuMapper.xml create mode 100644 backend/src/main/java/io/dataease/dto/SysAuthDetailDTO.java diff --git a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java index fd9dada411..bf468686b7 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java @@ -2,8 +2,11 @@ package io.dataease.auth.service.impl; import io.dataease.auth.api.dto.CurrentRoleDto; import io.dataease.auth.entity.SysUserEntity; +import io.dataease.base.domain.SysUser; +import io.dataease.base.mapper.SysUserMapper; import io.dataease.base.mapper.ext.AuthMapper; import io.dataease.auth.service.AuthUserService; +import io.dataease.base.mapper.ext.ExtPluginSysMenuMapper; import io.dataease.commons.constants.AuthConstants; import io.dataease.plugins.common.dto.PluginSysMenu; import io.dataease.plugins.util.PluginUtils; @@ -13,8 +16,12 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @Service @@ -23,6 +30,10 @@ public class AuthUserServiceImpl implements AuthUserService { @Resource private AuthMapper authMapper; + @Resource + private SysUserMapper sysUserMapper; + @Resource + private ExtPluginSysMenuMapper extPluginSysMenuMapper; /** * 此处需被F2CRealm登录认证调用 也就是说每次请求都会被调用 所以最好加上缓存 @@ -53,16 +64,16 @@ public class AuthUserServiceImpl implements AuthUserService { @Cacheable(value = AuthConstants.USER_PERMISSION_CACHE_NAME, key = "'user' + #userId" ) @Override public List permissions(Long userId){ - List permissions = authMapper.permissions(userId); - List pluginSysMenus = PluginUtils.pluginMenus(); - if (CollectionUtils.isNotEmpty(pluginSysMenus)) { - List menuIds = authMapper.userMenuIds(userId); - List pluginPermissions = pluginSysMenus.stream(). - filter(sysMenu -> menuIds.contains(sysMenu.getMenuId())) - .map(menu -> menu.getPermission()).collect(Collectors.toList()); - permissions.addAll(pluginPermissions); + // 用户登录获取菜单权限时同时更新插件菜单表 + this.syncPluginMenu(); + List permissions; + SysUser sysUser = sysUserMapper.selectByPrimaryKey(userId); + if(sysUser.getIsAdmin()!=null&&sysUser.getIsAdmin()){ + permissions = authMapper.permissionsAll(); + }else{ + permissions = authMapper.permissions(userId); } - return permissions.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList()); + return Optional.ofNullable(permissions).orElse(new ArrayList<>()).stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList()); } /** @@ -90,4 +101,13 @@ public class AuthUserServiceImpl implements AuthUserService { public void clearCache(Long userId) { } + + @Transactional + public void syncPluginMenu() { + List pluginSysMenuList = PluginUtils.pluginMenus(); + extPluginSysMenuMapper.deletePluginMenu(); + if(CollectionUtils.isNotEmpty(pluginSysMenuList)){ + extPluginSysMenuMapper.savePluginMenu(pluginSysMenuList); + } + } } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/AuthMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/AuthMapper.java index 00014f651a..d082a0faea 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/AuthMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/AuthMapper.java @@ -16,6 +16,8 @@ public interface AuthMapper { List permissions(@Param("userId") Long userId); + List permissionsAll(); + List userMenuIds(@Param("userId") Long userId); @@ -25,4 +27,5 @@ public interface AuthMapper { List roles(@Param("userId") Long userId); + } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/AuthMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/AuthMapper.xml index 155f9033c2..981dfc5c93 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/AuthMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/AuthMapper.xml @@ -4,19 +4,19 @@ - - - - - - - - + + + + + + + + - + - + @@ -34,12 +34,21 @@ where sur.user_id = #{userId} - + SELECT + sys_menu.permission + FROM + ( SELECT GET_V_AUTH_MODEL_ID_P_USE ( #{userId}, 'menu' ) cids ) t, + sys_menu + WHERE + FIND_IN_SET( sys_menu.menu_id, cids ) UNION ALL + SELECT + plugin_sys_menu.permission + FROM + ( SELECT GET_V_AUTH_MODEL_ID_P_USE ( #{userId}, 'menu' ) cids ) t, + plugin_sys_menu + WHERE + FIND_IN_SET( plugin_sys_menu.menu_id, cids ) + diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPluginSysMenuMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPluginSysMenuMapper.java new file mode 100644 index 0000000000..9c71ad3c29 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPluginSysMenuMapper.java @@ -0,0 +1,15 @@ +package io.dataease.base.mapper.ext; + +import io.dataease.base.mapper.ext.query.GridExample; +import io.dataease.controller.sys.request.SimpleTreeNode; +import io.dataease.plugins.common.dto.PluginSysMenu; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface ExtPluginSysMenuMapper { + + void savePluginMenu(@Param("menuList") List menuList); + + void deletePluginMenu(); +} diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPluginSysMenuMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPluginSysMenuMapper.xml new file mode 100644 index 0000000000..68dbb73c43 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPluginSysMenuMapper.xml @@ -0,0 +1,17 @@ + + + + + + delete from plugin_sys_menu + + + + INSERT INTO `plugin_sys_menu` ( menu_id, title, pid, sub_count, permission, hidden ) VALUES + + (#{menu.menuId},#{menu.title},#{menu.pid},#{menu.subCount},#{menu.permission},#{menu.hidden}) + + + + + diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java index 04afa38bcc..f196f0e581 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java @@ -1,13 +1,13 @@ package io.dataease.base.mapper.ext; import io.dataease.controller.request.SysAuthRequest; -import io.dataease.dto.SysAuthDTO; +import io.dataease.dto.SysAuthDetailDTO; import org.apache.ibatis.annotations.Param; import java.util.List; public interface ExtSysAuthMapper { - List searchAuth(SysAuthRequest request); + List searchAuth(SysAuthRequest request); Boolean authExist(@Param("authSource") String authSource, @Param("authTarget") String authTarget); diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml index 9131f63401..4c24e6aeaa 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml @@ -2,17 +2,15 @@ - - - - - - - - + + + + + - select sys_auth.id, sys_auth.auth_source, diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.java index 7dbe904cc4..f269b3c4fd 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.java @@ -7,4 +7,5 @@ import java.util.List; public interface ExtVAuthModelMapper { List searchTree(BaseTreeRequest request); + } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.xml index ee2d0bf01a..56f1be6f98 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtVAuthModelMapper.xml @@ -19,7 +19,7 @@ model_type = #{modelType} - and FIND_IN_SET(v_auth_model.id,GET_V_AUTH_MODEL_WITH_PARENT ( cids2 ,#{modelType})) + and FIND_IN_SET(v_auth_model.id,GET_V_AUTH_MODEL_WITH_PARENT ( cids2 ,#{modelType})) and v_auth_model.pid = #{pid} @@ -36,7 +36,8 @@ - and FIND_IN_SET(v_auth_model.id,GET_V_AUTH_MODEL_WITH_PARENT ( (select GROUP_CONCAT(id) from v_auth_model where model_type = #{modelType} and `name` like CONCAT('%', #{name},'%')) ,#{modelType})) + and FIND_IN_SET(v_auth_model.id,GET_V_AUTH_MODEL_WITH_PARENT ( (select GROUP_CONCAT(id) from + v_auth_model where model_type = #{modelType} and `name` like CONCAT('%', #{name},'%')) ,#{modelType})) @@ -54,7 +55,7 @@ model_type = #{modelType} - and FIND_IN_SET(v_auth_model.id,GET_V_AUTH_MODEL_WITH_PARENT ( cids3 ,#{modelType})) + and FIND_IN_SET(v_auth_model.id,GET_V_AUTH_MODEL_WITH_PARENT ( cids3 ,#{modelType})) ) authTemp @@ -69,4 +70,5 @@ + diff --git a/backend/src/main/java/io/dataease/commons/constants/SystemConstants.java b/backend/src/main/java/io/dataease/commons/constants/SystemConstants.java index e474609ae8..3cb14c5c06 100644 --- a/backend/src/main/java/io/dataease/commons/constants/SystemConstants.java +++ b/backend/src/main/java/io/dataease/commons/constants/SystemConstants.java @@ -19,5 +19,10 @@ public class SystemConstants { public final static Integer OFF = 0; } + public static final class AUTH_SOURCE{ + public final static String MENU = "menu"; + } + + } diff --git a/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java b/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java index d21b9735a3..0975dd7e7e 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java @@ -9,6 +9,7 @@ import io.dataease.controller.request.BaseTreeRequest; import io.dataease.controller.request.SysAuthDetailRequest; import io.dataease.controller.request.SysAuthRequest; import io.dataease.dto.BaseAuthDetail; +import io.dataease.dto.SysAuthDetailDTO; import io.dataease.dto.VAuthModelDTO; import io.dataease.service.sys.SysAuthService; import io.swagger.annotations.Api; @@ -44,7 +45,7 @@ public class SysAuthController { @ApiOperation("查询授权") @PostMapping("/authDetails") - public Map> authDetails(@RequestBody SysAuthRequest request){ + public Map> authDetails(@RequestBody SysAuthRequest request){ return sysAuthService.searchAuthDetails(request); } diff --git a/backend/src/main/java/io/dataease/dto/SysAuthDetailDTO.java b/backend/src/main/java/io/dataease/dto/SysAuthDetailDTO.java new file mode 100644 index 0000000000..371a02abaf --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/SysAuthDetailDTO.java @@ -0,0 +1,20 @@ +package io.dataease.dto; + +import io.dataease.base.domain.SysAuthDetail; +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2021-06-03 + * Description: + */ +@Data +public class SysAuthDetailDTO extends SysAuthDetail { + private String authSource; + + private String authSourceType; + + private String authTarget; + + private String authTargetType; +} diff --git a/backend/src/main/java/io/dataease/service/sys/SysAuthService.java b/backend/src/main/java/io/dataease/service/sys/SysAuthService.java index 9c815d7624..bfb9a1355a 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysAuthService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysAuthService.java @@ -12,12 +12,10 @@ import io.dataease.commons.constants.SystemConstants; import io.dataease.commons.utils.AuthUtils; import io.dataease.controller.request.BaseTreeRequest; import io.dataease.controller.request.SysAuthRequest; -import io.dataease.dto.SysAuthDTO; -import io.dataease.dto.SysDeptDTO; +import io.dataease.dto.SysAuthDetailDTO; import io.dataease.dto.VAuthModelDTO; import io.dataease.i18n.Translator; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -25,6 +23,8 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; +import static java.util.stream.Collectors.groupingBy; + @Service public class SysAuthService { @@ -41,7 +41,7 @@ public class SysAuthService { @Resource private ExtVAuthModelMapper extVAuthModelMapper; - private static List PRI_MODEL_TYPE = Arrays.asList("link","dataset","chart","panel","menu"); + private static List PRI_MODEL_TYPE = Arrays.asList("link", "dataset", "chart", "panel", "menu"); /** @@ -51,23 +51,22 @@ public class SysAuthService { public List searchAuthModelTree(BaseTreeRequest request) { CurrentUserDto currentUserDto = AuthUtils.getUser(); request.setCreateBy(String.valueOf(currentUserDto.getUserId())); - if(PRI_MODEL_TYPE.contains(request.getModelType())&&(currentUserDto.getIsAdmin() == null || !currentUserDto.getIsAdmin())){ + if (PRI_MODEL_TYPE.contains(request.getModelType()) && (currentUserDto.getIsAdmin() == null || !currentUserDto.getIsAdmin())) { request.setWithAuth("1"); - }else{ + } else { request.setWithAuth("0"); } return extVAuthModelMapper.searchTree(request); } - /** * @Description: 查询授权明细map **/ - public Map> searchAuthDetails(SysAuthRequest request) { - List authDTOList = extSysAuthMapper.searchAuth(request); - return Optional.ofNullable(authDTOList).orElse(new ArrayList<>()).stream() - .collect(Collectors.toMap(SysAuthDTO::getAuthSource, SysAuthDTO::getSysAuthDetails)); + public Map> searchAuthDetails(SysAuthRequest request) { + List authDetailDTOList = extSysAuthMapper.searchAuth(request); + return Optional.ofNullable(authDetailDTOList).orElse(new ArrayList<>()).stream() + .collect(groupingBy(SysAuthDetailDTO::getAuthSource)); } /** @@ -81,33 +80,33 @@ public class SysAuthService { SysAuthDetail sysAuthDetail = request.getAuthDetail(); //TODO 获取需要授权的资源id(当前节点和所有权限的下级节点) List authSources = getAuthModels(request.getAuthSource(), request.getAuthSourceType()); - if(CollectionUtils.isEmpty(authSources)){ + if (CollectionUtils.isEmpty(authSources)) { throw new RuntimeException(Translator.get("i18n_auth_source_be_canceled")); } //TODO 获取需要被授权的目标id(部门当前节点和所有权限的下级节点) - List authTargets =getAuthModels(request.getAuthTarget(), request.getAuthTargetType()); + List authTargets = getAuthModels(request.getAuthTarget(), request.getAuthTargetType()); - if(CollectionUtils.isNotEmpty(authSources)&& CollectionUtils.isNotEmpty(authTargets)){ + if (CollectionUtils.isNotEmpty(authSources) && CollectionUtils.isNotEmpty(authTargets)) { List authIdChange = new ArrayList<>(); authTargets.stream().forEach(authTarget -> { - authSources.forEach(authSource ->{ - String authId = checkAuth(authSource, request.getAuthSourceType(),authTarget,request.getAuthTargetType()); + authSources.forEach(authSource -> { + String authId = checkAuth(authSource, request.getAuthSourceType(), authTarget, request.getAuthTargetType()); authIdChange.add(authId); }); }); // 授权修改 - if(sysAuthDetail.getPrivilegeValue()==SystemConstants.PRIVILEGE_VALUE.ON){ + if (sysAuthDetail.getPrivilegeValue() == SystemConstants.PRIVILEGE_VALUE.ON) { //当前为开启1 >>> 关闭0 需要将权限级别(PrivilegeType)大于当前级别的全新都修改为关闭 0 - extSysAuthDetailMapper.authDetailsChange(SystemConstants.PRIVILEGE_VALUE.OFF,sysAuthDetail.getPrivilegeType(),authIdChange); - }else{ + extSysAuthDetailMapper.authDetailsChange(SystemConstants.PRIVILEGE_VALUE.OFF, sysAuthDetail.getPrivilegeType(), authIdChange); + } else { //当前为关闭0 >>> 开启1 需要将权限级别(PrivilegeType)小于当前级别的全新都修改为开启 1 - extSysAuthDetailMapper.authDetailsChange(SystemConstants.PRIVILEGE_VALUE.ON,sysAuthDetail.getPrivilegeType(),authIdChange); + extSysAuthDetailMapper.authDetailsChange(SystemConstants.PRIVILEGE_VALUE.ON, sysAuthDetail.getPrivilegeType(), authIdChange); } } } private List getAuthModels(String id, String type) { - List vAuthModelDTOS = searchAuthModelTree(new BaseTreeRequest(id,type, SystemConstants.WITH_EXTEND.CHILDREN)); + List vAuthModelDTOS = searchAuthModelTree(new BaseTreeRequest(id, type, SystemConstants.WITH_EXTEND.CHILDREN)); List authSources = Optional.ofNullable(vAuthModelDTOS).orElse(new ArrayList<>()).stream().map(VAuthModelDTO::getId) .collect(Collectors.toList()); return authSources; @@ -116,9 +115,9 @@ public class SysAuthService { /** * @Description: 查询当前target 是否有存在授权 不存在 增加权限 并复制权限模板 **/ - private String checkAuth(String authSource,String authSourceType,String authTarget,String authTargetType){ - String authId = extSysAuthMapper.findAuthId(authSource,authSourceType,authTarget,authTargetType); - if(StringUtils.isEmpty(authId)){ + private String checkAuth(String authSource, String authSourceType, String authTarget, String authTargetType) { + String authId = extSysAuthMapper.findAuthId(authSource, authSourceType, authTarget, authTargetType); + if (StringUtils.isEmpty(authId)) { authId = UUID.randomUUID().toString(); //TODO 插入权限 SysAuth sysAuthRecord = new SysAuth(); @@ -132,10 +131,11 @@ public class SysAuthService { sysAuthMapper.insertSelective(sysAuthRecord); //TODO 复制权限模板 - extSysAuthDetailMapper.copyAuthModel(authSourceType,authId,AuthUtils.getUser().getUsername()); + extSysAuthDetailMapper.copyAuthModel(authSourceType, authId, AuthUtils.getUser().getUsername()); } return authId; } + } From 23a003787e86ef2d09aba183792cb137649f4c3c Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 3 Jun 2021 14:18:15 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3token=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E5=AF=BC=E8=87=B4=E7=99=BB=E5=BD=95=E8=B6=85=E6=97=B6?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/io/dataease/auth/filter/JWTFilter.java | 2 +- backend/src/main/java/io/dataease/auth/util/JWTUtils.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java index 768acc42dd..48376db8c6 100644 --- a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java +++ b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java @@ -111,7 +111,7 @@ public class JWTFilter extends BasicHttpAuthenticationFilter { // JWTUtils.removeTokenExpire(token); String newToken = JWTUtils.sign(tokenInfo, password); // 记录新token操作时间 - // JWTUtils.addTokenExpire(newToken); + JWTUtils.addTokenExpire(newToken); JWTToken jwtToken = new JWTToken(newToken); this.getSubject(request, response).login(jwtToken); diff --git a/backend/src/main/java/io/dataease/auth/util/JWTUtils.java b/backend/src/main/java/io/dataease/auth/util/JWTUtils.java index e71b2ab696..7b25d06748 100644 --- a/backend/src/main/java/io/dataease/auth/util/JWTUtils.java +++ b/backend/src/main/java/io/dataease/auth/util/JWTUtils.java @@ -158,10 +158,12 @@ public class JWTUtils { CacheManager cacheManager = CommonBeanFactory.getBean(CacheManager.class); Cache tokens_expire = cacheManager.getCache("tokens_expire"); Long expTime = tokens_expire.get(token, Long.class); + // System.out.println("get-------"+token+" :"+expTime); return expTime; } public static void removeTokenExpire(String token){ + // System.out.println("remove----"+token); CacheManager cacheManager = CommonBeanFactory.getBean(CacheManager.class); Cache tokens_expire = cacheManager.getCache("tokens_expire"); tokens_expire.evict(token); @@ -171,6 +173,7 @@ public class JWTUtils { CacheManager cacheManager = CommonBeanFactory.getBean(CacheManager.class); Cache tokens_expire = cacheManager.getCache("tokens_expire"); long now = System.currentTimeMillis(); + // System.out.println("add-------"+token+" :"+now); tokens_expire.put(token, now); } From 5e589cf71a5e7375aad0d8c2371e996406b5f10a Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Thu, 3 Jun 2021 14:51:08 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20=E8=8F=9C=E5=8D=95=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E7=AE=A1=E7=90=86=E6=95=B4=E5=90=88=E5=88=B0=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AE=A1=E7=90=86=E4=B8=AD=20=E5=A2=9E=E5=8A=A0flyway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/migration/V2__dataease_ddl.sql | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/backend/src/main/resources/db/migration/V2__dataease_ddl.sql b/backend/src/main/resources/db/migration/V2__dataease_ddl.sql index c980bc0363..04e6d56d06 100644 --- a/backend/src/main/resources/db/migration/V2__dataease_ddl.sql +++ b/backend/src/main/resources/db/migration/V2__dataease_ddl.sql @@ -458,3 +458,28 @@ CREATE TABLE `license` ( `f2c_license` longtext COMMENT 'F2C License', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + +DROP TABLE IF EXISTS `plugin_sys_menu`; +CREATE TABLE `plugin_sys_menu` ( + `menu_id` bigint(8) NOT NULL, + `pid` bigint(8) DEFAULT NULL, + `sub_count` int(8) DEFAULT NULL, + `type` varchar(255) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `component` varchar(255) DEFAULT NULL, + `menu_sort` varchar(255) DEFAULT NULL, + `icon` varchar(255) DEFAULT NULL, + `path` varchar(255) DEFAULT NULL, + `i_frame` tinyint(1) DEFAULT NULL, + `cache` tinyint(1) DEFAULT NULL, + `hidden` tinyint(1) DEFAULT NULL, + `permission` varchar(255) DEFAULT NULL, + `create_by` varchar(255) DEFAULT NULL, + `update_by` varchar(255) DEFAULT NULL, + `create_time` bigint(13) DEFAULT NULL, + `update_time` bigint(13) DEFAULT NULL, + `no_layout` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`menu_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;