From 3f8a2e1233aaea99520f56b3794c533b82959cda Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Tue, 8 Mar 2022 14:17:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=BE=E4=B8=8B=E9=92=89=E9=92=89=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E6=89=8B=E6=9C=BA=E5=8F=B7=E8=8E=B7=E5=8F=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=9B=AE=E5=BD=95=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/busi/ISysUserService.java | 7 ++++ .../controller/base/WhiteController.java | 44 ++++++++++++++++++++++ .../serviceimpl/busi/SysUserService.java | 16 ++++++++ 3 files changed, 67 insertions(+) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java index 49d328c..87a843e 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java @@ -382,4 +382,11 @@ public interface ISysUserService { @ApiOperation(value = "查询所有用户") List findAll(); + + /** + * 获取用户菜单 + * @param user + */ + @ApiOperation(value = "获取用户菜单信息") + void packUser(SysUser user); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index 140e23d..349e5b5 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -313,6 +313,31 @@ public class WhiteController extends CoreBaseController { return Optional.ofNullable(data); } + @GetMapping(value = "/auth/dingtalk/auth") + @ApiOperation(value = "鉴权", notes = "鉴权") + public ResultBean authByPhoneNumber(@RequestParam String authCode) { + SysUser user = null; + List menuList; + try { + OapiV2UserGetResponse dingTalkUserInfo = getDingTalkUserInfo(authCode); + + String mobile = dingTalkUserInfo.getResult().getMobile(); + if (StringUtils.isEmpty(mobile)) { + return ResultBean.fail("用户并未在钉钉中设置手机号 或 钉钉接口权限不足无法获取到手机号"); + } + user = userService.getSysUserByPhone(mobile); + if (user == null) { + return ResultBean.fail("未根据用户手机在平台中找到相应记录 钉钉获取的手机号为" + mobile); + } + userService.packUser(user); + menuList = user.getMenuList(); + } catch (Exception e) { + LOGGER.error("用户鉴权失败:{},e:{}", user, e.getMessage()); + return ResultBean.fail("对指定手机号允许,权限不足,请联系管理员"); + } + return ResultBean.success("查询成功").setResultList(menuList); + + } @GetMapping(value = "/auth/dingtalk/login") @ApiOperation(value = "登录", notes = "登录") public ResultBean loginByPhoneNumber(HttpServletRequest request, String dingTalkTmpAuthCode, @@ -991,4 +1016,23 @@ public class WhiteController extends CoreBaseController { return sysUserController.updateBatchStatusByUserLoginNames(userLoginNames,status); } + + private OapiV2UserGetResponse getDingTalkUserInfo(String dingTalkTmpAuthCode) { + String dingTalkUrl = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_URL); + String dingTalkAppKey = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_KEY); + String dingTalkAppSecret = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_SECRET); + String dingTalkWhiteList = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_WHITE_LIST); + if (StringUtils.isEmpty(dingTalkUrl) || + StringUtils.isEmpty(dingTalkAppKey) || + StringUtils.isEmpty(dingTalkAppSecret) || + StringUtils.isEmpty(dingTalkWhiteList)) { + throw ImppExceptionBuilder.newInstance().setErrorDetail("访问钉钉的系统参数缺失,请在平台的系统参数中进行配置").build(); + } + + Optional userInfo = dingTalkService.getUserInfo(dingTalkUrl, dingTalkAppKey, dingTalkAppSecret, dingTalkTmpAuthCode); + if (!userInfo.isPresent()) { + throw ImppExceptionBuilder.newInstance().setErrorDetail("访问钉钉的系统员工信息不存在").build(); + } + return userInfo.get(); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java index 3ca6622..ef84ff5 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -941,6 +941,22 @@ public class SysUserService implements ISysUserService { return userRDao.findAll(); } + @Override + public void packUser(SysUser user) { + if (user.getUserStatus() != CommonEnumUtil.USER_STATUS.ENABLE.getValue()) { + throw new LockedAccountException("账号已被锁定"); + } + /** + * 封装用户角色信息 + */ + packSysUserRole(user); + /** + * 封装用户菜单 + */ + packSysUserMenu(user); + + } + /** * 账号数据排序 * 创建时间 角色升序