diff --git a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java index 2c0bfe854..5ff57c429 100644 --- a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java +++ b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java @@ -23,18 +23,18 @@ public class LoginUser implements Serializable { /** * 用户主键id */ - private Long id; + private Long userId; + + /** + * 姓名 + */ + private String realName; /** * 账号 */ private String account; - /** - * 姓名 - */ - private String name; - /** * 公司/组织id */ diff --git a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java index 3bbc1c22e..b168160fc 100644 --- a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java +++ b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java @@ -158,7 +158,7 @@ public class AuthServiceImpl implements AuthServiceApi { LoginUser loginUser = userValidateInfo.getLoginUser(); // 6.生成用户的token - DefaultJwtPayload defaultJwtPayload = new DefaultJwtPayload(loginUser.getId(), loginUser.getAccount(), loginRequest.getRememberMe()); + DefaultJwtPayload defaultJwtPayload = new DefaultJwtPayload(loginUser.getUserId(), loginUser.getAccount(), loginRequest.getRememberMe()); String jwtToken = JwtContext.me().generateTokenDefaultPayload(defaultJwtPayload); synchronized (SESSION_OPERATE_LOCK) { @@ -175,7 +175,7 @@ public class AuthServiceImpl implements AuthServiceApi { // 9.更新用户登录时间和ip String ip = HttpServletUtil.getRequestClientIp(HttpServletUtil.getRequest()); - userServiceApi.updateUserLoginInfo(loginUser.getId(), new Date(), ip); + userServiceApi.updateUserLoginInfo(loginUser.getUserId(), new Date(), ip); // 10.组装返回结果 return new LoginResponse(loginUser, jwtToken); diff --git a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/MemoryCacheSessionManager.java b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/MemoryCacheSessionManager.java index d4ad44059..1455de941 100644 --- a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/MemoryCacheSessionManager.java +++ b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/MemoryCacheSessionManager.java @@ -50,7 +50,7 @@ public class MemoryCacheSessionManager implements SessionManagerApi { loginUserCache.put(getTokenKey(token), loginUser); // 装配用户token的缓存 - String userIdKey = getUserIdKey(loginUser.getId()); + String userIdKey = getUserIdKey(loginUser.getUserId()); Set theUserTokens = loginTokenCache.get(userIdKey); if (theUserTokens == null) { HashSet tempUserTokens = new HashSet<>(); @@ -74,7 +74,7 @@ public class MemoryCacheSessionManager implements SessionManagerApi { // 删除用户id对应token的缓存 if (loginUser != null) { - Long userId = loginUser.getId(); + Long userId = loginUser.getUserId(); Set userTokens = loginTokenCache.get(getUserIdKey(userId)); if (userTokens != null) { userTokens.remove(token); @@ -102,7 +102,7 @@ public class MemoryCacheSessionManager implements SessionManagerApi { } // 获取用户id - Long userId = session.getId(); + Long userId = session.getUserId(); // 设置用户id对应的token列表为参数token HashSet tokenSet = new HashSet<>(); diff --git a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/RedisSessionManager.java b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/RedisSessionManager.java index 09efc9ba4..dc5199eb0 100644 --- a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/RedisSessionManager.java +++ b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/RedisSessionManager.java @@ -1,8 +1,8 @@ package cn.stylefeng.roses.kernel.auth.session; -import com.alibaba.fastjson.parser.ParserConfig; import cn.stylefeng.roses.kernel.auth.api.SessionManagerApi; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; +import com.alibaba.fastjson.parser.ParserConfig; import org.springframework.data.redis.core.RedisTemplate; import java.util.HashSet; @@ -57,7 +57,7 @@ public class RedisSessionManager implements SessionManagerApi { loginUserRedisTemplate.opsForValue().set(getTokenKey(token), loginUser, sessionExpiredSeconds, TimeUnit.SECONDS); // 装配用户token的缓存 - String userIdKey = getUserIdKey(loginUser.getId()); + String userIdKey = getUserIdKey(loginUser.getUserId()); Set theUserTokens = loginTokenRedisTemplate.opsForValue().get(userIdKey); if (theUserTokens == null) { HashSet tempUserTokens = new HashSet<>(); @@ -82,7 +82,7 @@ public class RedisSessionManager implements SessionManagerApi { // 删除用户id对应token的缓存 if (loginUser != null) { - Long userId = loginUser.getId(); + Long userId = loginUser.getUserId(); Set userTokens = loginTokenRedisTemplate.opsForValue().get(getUserIdKey(userId)); if (userTokens != null) { userTokens.remove(token); @@ -110,7 +110,7 @@ public class RedisSessionManager implements SessionManagerApi { } // 获取用户id - Long userId = session.getId(); + Long userId = session.getUserId(); // 设置用户id对应的token列表为参数token HashSet tokenSet = new HashSet<>(); diff --git a/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/fieldfill/CustomMetaObjectHandler.java b/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/fieldfill/CustomMetaObjectHandler.java index e26e3b076..f6ea2213a 100644 --- a/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/fieldfill/CustomMetaObjectHandler.java +++ b/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/fieldfill/CustomMetaObjectHandler.java @@ -1,8 +1,8 @@ package cn.stylefeng.roses.kernel.db.mp.fieldfill; -import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.ReflectionException; @@ -64,7 +64,7 @@ public class CustomMetaObjectHandler implements MetaObjectHandler { private Long getUserUniqueId() { try { - return LoginContext.me().getLoginUser().getId(); + return LoginContext.me().getLoginUser().getUserId(); } catch (Exception e) { //如果获取不到就返回-1 return -1L; diff --git a/kernel-d-log/log-api/src/main/java/cn/stylefeng/roses/kernel/log/api/factory/appender/AuthedLogAppender.java b/kernel-d-log/log-api/src/main/java/cn/stylefeng/roses/kernel/log/api/factory/appender/AuthedLogAppender.java index 94596917b..c27d0bd5b 100644 --- a/kernel-d-log/log-api/src/main/java/cn/stylefeng/roses/kernel/log/api/factory/appender/AuthedLogAppender.java +++ b/kernel-d-log/log-api/src/main/java/cn/stylefeng/roses/kernel/log/api/factory/appender/AuthedLogAppender.java @@ -29,7 +29,7 @@ public class AuthedLogAppender { // 填充登录用户的userId LoginUser loginUser = LoginContext.me().getLoginUser(); - logRecordDTO.setUserId(loginUser.getId()); + logRecordDTO.setUserId(loginUser.getUserId()); } catch (Exception ignored) { // 获取不到用户登录信息,就不填充 } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/SysUserExceptionEnum.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/SysUserExceptionEnum.java index 8f745bdbf..b627ff02a 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/SysUserExceptionEnum.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/SysUserExceptionEnum.java @@ -81,7 +81,12 @@ public enum SysUserExceptionEnum implements AbstractExceptionEnum { /** * 更新用户状态错误 */ - UPDATE_USER_STATUS_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "59", "更新用户状态错误,更新生效数量0");; + UPDATE_USER_STATUS_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "59", "更新用户状态错误,更新生效数量0"), + + /** + * 当前用户未分配菜单 + */ + USER_NOT_HAVE_MENUS(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "60", "当前用户未分配菜单"); /** * 错误编码 diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/request/SysAppRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/request/SysAppRequest.java index cc95a7845..314afc771 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/request/SysAppRequest.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/request/SysAppRequest.java @@ -22,37 +22,36 @@ public class SysAppRequest extends BaseRequest { /** * 主键 */ - @NotNull(message = "id不能为空,请检查id参数", groups = {edit.class, delete.class, detail.class}) - private Long id; + @NotNull(message = "appId不能为空", groups = {edit.class, delete.class, detail.class}) + private Long appId; /** * 名称 */ - @NotBlank(message = "名称不能为空,请检查name参数", groups = {add.class, edit.class}) + @NotBlank(message = "名称不能为空", groups = {add.class, edit.class}) @TableUniqueValue( - message = "名称存在重复,请检查name参数", + message = "名称存在重复", groups = {add.class, edit.class}, tableName = "sys_app", - columnName = "name") - private String name; + columnName = "app_name") + private String appName; /** * 编码 */ - @NotBlank(message = "编码不能为空,请检查code参数", groups = {add.class, edit.class}) + @NotBlank(message = "编码不能为空", groups = {add.class, edit.class}) @TableUniqueValue( - message = "编码存在重复,请检查code参数", + message = "编码存在重复", groups = {add.class, edit.class}, tableName = "sys_app", - columnName = "code") - private String code; + columnName = "app_code") + private String appCode; /** - * 是否默认激活(Y-是,N-否),只能有一个系统默认激活 - * 用户登录后默认展示此系统菜单 + * 是否默认激活:Y-是,N-否,激活的应用下的菜单会在首页默认展开 */ - @NotBlank(message = "是否默认激活不能为空,请检查active参数", groups = {add.class, edit.class}) - @FlagValue(message = "是否默认激活格式错误,正确格式应该Y或者N,请检查active参数", groups = {add.class, edit.class}) + @NotBlank(message = "是否默认激活不能为空", groups = {add.class, edit.class}) + @FlagValue(message = "是否默认激活格式错误,正确格式应该Y或者N", groups = {add.class, edit.class}) private String activeFlag; } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/response/SysAppResponse.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/response/SysAppResponse.java index d8fb9baa7..50b06bbb5 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/response/SysAppResponse.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/response/SysAppResponse.java @@ -17,17 +17,17 @@ public class SysAppResponse implements Serializable { /** * 主键id */ - private Long id; + private Long appId; /** * 应用名称 */ - private String name; + private String appName; /** * 编码 */ - private String code; + private String appCode; /** * 是否默认激活(Y-是,N-否) diff --git a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/entity/SysApp.java b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/entity/SysApp.java index e0f24ed05..9718ead14 100644 --- a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/entity/SysApp.java +++ b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/entity/SysApp.java @@ -1,9 +1,9 @@ package cn.stylefeng.roses.kernel.app.modular.entity; +import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -21,35 +21,35 @@ public class SysApp extends BaseEntity { /** * 主键id */ - @TableId("id") - private Long id; + @TableId("app_id") + private Long appId; /** * 应用名称 */ - @TableField("name") - private String name; + @TableField("app_name") + private String appName; /** * 编码 */ - @TableField("code") - private String code; + @TableField("app_code") + private String appCode; /** - * 是否默认激活(Y-是,N-否) + * 是否默认激活:Y-是,N-否,激活的应用下的菜单会在首页默认展开 */ @TableField("active_flag") private String activeFlag; /** - * 状态(字典 1启用 2禁用) + * 状态:1-启用,2-禁用 */ @TableField("status_flag") private Integer statusFlag; /** - * 是否删除(Y-已删除,N-未删除) + * 是否删除:Y-已删除,N-未删除 */ @TableField("del_flag") private String delFlag; diff --git a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/impl/SysAppServiceImpl.java b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/impl/SysAppServiceImpl.java index 7464a2c56..e68feeab5 100644 --- a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/impl/SysAppServiceImpl.java +++ b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/impl/SysAppServiceImpl.java @@ -3,10 +3,6 @@ package cn.stylefeng.roses.kernel.app.modular.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.stylefeng.roses.kernel.app.modular.entity.SysApp; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.stylefeng.roses.kernel.app.modular.mapper.SysAppMapper; import cn.stylefeng.roses.kernel.app.modular.service.SysAppService; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; @@ -20,6 +16,10 @@ import cn.stylefeng.roses.kernel.system.AppServiceApi; import cn.stylefeng.roses.kernel.system.MenuServiceApi; import cn.stylefeng.roses.kernel.system.exception.enums.AppExceptionEnum; import cn.stylefeng.roses.kernel.system.pojo.app.request.SysAppRequest; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -73,7 +73,7 @@ public class SysAppServiceImpl extends ServiceImpl impleme @Override public void delete(SysAppRequest sysAppRequest) { SysApp sysApp = this.querySysApp(sysAppRequest); - String code = sysApp.getCode(); + String code = sysApp.getAppCode(); // 该应用下有菜单,则不能删除 boolean hasMenu = menuApi.hasMenu(code); @@ -126,15 +126,15 @@ public class SysAppServiceImpl extends ServiceImpl impleme HashSet simpleDicts = new HashSet<>(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysApp::getCode, appCodes); - queryWrapper.select(SysApp::getCode, SysApp::getId, SysApp::getName); + queryWrapper.in(SysApp::getAppCode, appCodes); + queryWrapper.select(SysApp::getAppCode, SysApp::getAppId, SysApp::getAppName); List list = this.list(queryWrapper); for (SysApp sysApp : list) { SimpleDict simpleDict = new SimpleDict(); - simpleDict.setId(sysApp.getId()); - simpleDict.setCode(sysApp.getCode()); - simpleDict.setName(sysApp.getName()); + simpleDict.setId(sysApp.getAppId()); + simpleDict.setCode(sysApp.getAppCode()); + simpleDict.setName(sysApp.getAppName()); simpleDicts.add(simpleDict); } @@ -148,7 +148,7 @@ public class SysAppServiceImpl extends ServiceImpl impleme * @date 2020/3/26 9:56 */ private SysApp querySysApp(SysAppRequest sysAppRequest) { - SysApp sysApp = this.getById(sysAppRequest.getId()); + SysApp sysApp = this.getById(sysAppRequest.getAppId()); if (ObjectUtil.isNull(sysApp)) { throw new ServiceException(AppExceptionEnum.APP_NOT_EXIST); } @@ -170,7 +170,7 @@ public class SysAppServiceImpl extends ServiceImpl impleme // 排除自己 if (excludeSelf) { - appQueryWrapperByActive.ne(SysApp::getId, sysAppRequest.getId()); + appQueryWrapperByActive.ne(SysApp::getAppId, sysAppRequest.getAppId()); } int countByActive = this.count(appQueryWrapperByActive); @@ -191,18 +191,18 @@ public class SysAppServiceImpl extends ServiceImpl impleme LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (ObjectUtil.isNotNull(sysAppRequest)) { // 根据id查询 - if (ObjectUtil.isNotEmpty(sysAppRequest.getId())) { - queryWrapper.eq(SysApp::getId, sysAppRequest.getId()); + if (ObjectUtil.isNotEmpty(sysAppRequest.getAppId())) { + queryWrapper.eq(SysApp::getAppId, sysAppRequest.getAppId()); } // 根据名称模糊查询 - if (ObjectUtil.isNotEmpty(sysAppRequest.getName())) { - queryWrapper.like(SysApp::getName, sysAppRequest.getName()); + if (ObjectUtil.isNotEmpty(sysAppRequest.getAppName())) { + queryWrapper.like(SysApp::getAppName, sysAppRequest.getAppName()); } // 根据编码模糊查询 - if (ObjectUtil.isNotEmpty(sysAppRequest.getCode())) { - queryWrapper.like(SysApp::getCode, sysAppRequest.getCode()); + if (ObjectUtil.isNotEmpty(sysAppRequest.getAppCode())) { + queryWrapper.like(SysApp::getAppCode, sysAppRequest.getAppCode()); } } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java index 61c7e913f..d5ca7bf9d 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java @@ -43,7 +43,9 @@ import cn.stylefeng.roses.kernel.system.MenuServiceApi; import cn.stylefeng.roses.kernel.system.RoleServiceApi; import cn.stylefeng.roses.kernel.system.constants.SymbolConstant; import cn.stylefeng.roses.kernel.system.constants.SystemConstants; +import cn.stylefeng.roses.kernel.system.exception.SystemModularException; import cn.stylefeng.roses.kernel.system.exception.enums.SysMenuExceptionEnum; +import cn.stylefeng.roses.kernel.system.exception.enums.SysUserExceptionEnum; import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest; import cn.stylefeng.roses.kernel.system.pojo.menu.tree.LoginMenuTreeNode; import cn.stylefeng.roses.kernel.system.pojo.menu.tree.MenuBaseTreeNode; @@ -150,6 +152,11 @@ public class SysMenuServiceImpl extends ServiceImpl impl List menuIdList = getCurrentUserMenuIds(); + // 当前用户没有菜单 + if (menuIdList.isEmpty()) { + throw new SystemModularException(SysUserExceptionEnum.USER_NOT_HAVE_MENUS); + } + // 获取菜单列表 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SysMenu::getMenuId, menuIdList)