From 92ace892a4c6ba2795f358e6a9dc0ae30a12787e Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Wed, 21 Jun 2023 16:18:06 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.6.0=E3=80=91=E3=80=90sys=E3=80=91?= =?UTF-8?q?=E3=80=90permission=E3=80=91=E5=A2=9E=E5=8A=A0=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=94=A8=E6=88=B7=E6=BF=80=E6=B4=BB=E7=9A=84=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E6=9C=BA=E6=9E=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kernel/sys/api/SysUserOrgServiceApi.java | 11 +++++ .../api/exception/enums/OrgExceptionEnum.java | 7 +++- .../service/impl/SysUserOrgServiceImpl.java | 8 ++++ .../controller/UserIndexInfoController.java | 15 +++++++ .../login/pojo/UpdateUserOrgAppRequest.java | 27 +++++++++++++ .../login/service/UserIndexInfoService.java | 40 +++++++++++++++++-- 6 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/pojo/UpdateUserOrgAppRequest.java diff --git a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysUserOrgServiceApi.java b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysUserOrgServiceApi.java index d69c23be7..160adf08f 100644 --- a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysUserOrgServiceApi.java +++ b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysUserOrgServiceApi.java @@ -40,4 +40,15 @@ public interface SysUserOrgServiceApi { */ List getOrgUserIdList(Long orgId, Boolean containSubOrgFlag); + /** + * 判断用户是否有指定组织机构的权限 + * + * @param orgId 组织机构id + * @param userId 用户id + * @return true-用户有所属该机构的权限,false-用户不属于该机构 + * @author fengshuonan + * @since 2023/6/21 16:11 + */ + boolean validateUserOrgAuth(Long orgId, Long userId); + } diff --git a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/exception/enums/OrgExceptionEnum.java b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/exception/enums/OrgExceptionEnum.java index ce889f119..39d646505 100644 --- a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/exception/enums/OrgExceptionEnum.java +++ b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/exception/enums/OrgExceptionEnum.java @@ -21,7 +21,12 @@ public enum OrgExceptionEnum implements AbstractExceptionEnum { /** * 删除机构失败,该机构下有绑定员工 */ - DELETE_ORGANIZATION_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10002", "删除机构失败,该机构下有绑定员工"); + DELETE_ORGANIZATION_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10002", "删除机构失败,该机构下有绑定员工"), + + /** + * 用户没有该组织机构的权限,无法切换组织机构 + */ + UPDATE_LOGIN_USER_ORG_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10003", "用户没有该组织机构的权限,无法切换组织机构"); /** * 错误编码 diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserOrgServiceImpl.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserOrgServiceImpl.java index 04bba435e..b10c87949 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserOrgServiceImpl.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserOrgServiceImpl.java @@ -195,6 +195,14 @@ public class SysUserOrgServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysUserOrg::getUserId, userId); + queryWrapper.eq(SysUserOrg::getOrgId, orgId); + return this.count(queryWrapper) > 0; + } + /** * 获取信息 * diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/controller/UserIndexInfoController.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/controller/UserIndexInfoController.java index 11f8616a5..c2087c2a2 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/controller/UserIndexInfoController.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/controller/UserIndexInfoController.java @@ -4,9 +4,12 @@ import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; +import cn.stylefeng.roses.kernel.sys.modular.login.pojo.UpdateUserOrgAppRequest; import cn.stylefeng.roses.kernel.sys.modular.login.pojo.UserIndexInfo; import cn.stylefeng.roses.kernel.sys.modular.login.service.UserIndexInfoService; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @@ -36,4 +39,16 @@ public class UserIndexInfoController { return new SuccessResponseData<>(userIndexInfoService.getUserIndexInfo()); } + /** + * 切换当前用户激活的组织机构id或当前激活的应用id + * + * @author fengshuonan + * @since 2023/6/21 16:03 + */ + @PostResource(name = "切换当前用户激活的组织机构id或当前激活的应用id", path = "/updateUserOrgOrApp") + public ResponseData updateUserOrgOrApp(@RequestBody UpdateUserOrgAppRequest updateUserOrgAppRequest) { + userIndexInfoService.updateUserOrgOrApp(updateUserOrgAppRequest); + return new SuccessResponseData<>(); + } + } diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/pojo/UpdateUserOrgAppRequest.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/pojo/UpdateUserOrgAppRequest.java new file mode 100644 index 000000000..f901df7dd --- /dev/null +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/pojo/UpdateUserOrgAppRequest.java @@ -0,0 +1,27 @@ +package cn.stylefeng.roses.kernel.sys.modular.login.pojo; + +import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; +import lombok.Data; + +/** + * 切换当前用户激活的组织机构id或者应用id + * + * @author fengshuonan + * @since 2023/6/21 16:05 + */ +@Data +public class UpdateUserOrgAppRequest { + + /** + * 切换后的组织机构id + */ + @ChineseDescription("切换后的组织机构id") + private Long newOrgId; + + /** + * 切换后的应用id + */ + @ChineseDescription("切换后的应用id") + private Long newAppId; + +} diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java index c719cc66a..c411ac320 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java @@ -6,18 +6,17 @@ import cn.stylefeng.roses.kernel.auth.api.SessionManagerApi; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; +import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory; import cn.stylefeng.roses.kernel.sys.api.SysUserOrgServiceApi; import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi; import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi; +import cn.stylefeng.roses.kernel.sys.api.exception.enums.OrgExceptionEnum; import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO; import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserOrgDTO; import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService; import cn.stylefeng.roses.kernel.sys.modular.login.expander.WebSocketConfigExpander; -import cn.stylefeng.roses.kernel.sys.modular.login.pojo.IndexUserAppInfo; -import cn.stylefeng.roses.kernel.sys.modular.login.pojo.IndexUserMenuInfo; -import cn.stylefeng.roses.kernel.sys.modular.login.pojo.IndexUserOrgInfo; -import cn.stylefeng.roses.kernel.sys.modular.login.pojo.UserIndexInfo; +import cn.stylefeng.roses.kernel.sys.modular.login.pojo.*; import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu; import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuOptionsService; import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService; @@ -100,6 +99,39 @@ public class UserIndexInfoService { return userIndexInfo; } + /** + * 切换当前登录用户的组织机构id或者当前激活的appId + * + * @author fengshuonan + * @since 2023/6/21 16:04 + */ + public void updateUserOrgOrApp(UpdateUserOrgAppRequest updateUserOrgAppRequest) { + + // 获取当前登录用户 + LoginUser loginUser = LoginContext.me().getLoginUser(); + + if (updateUserOrgAppRequest.getNewOrgId() != null) { + + // 判断当前用户是否有指定的组织机构id + boolean result = sysUserOrgServiceApi.validateUserOrgAuth(updateUserOrgAppRequest.getNewOrgId(), loginUser.getUserId()); + if (!result) { + throw new ServiceException(OrgExceptionEnum.UPDATE_LOGIN_USER_ORG_ERROR); + } + + loginUser.setCurrentOrgId(updateUserOrgAppRequest.getNewOrgId()); + } + + if (updateUserOrgAppRequest.getNewAppId() != null) { + + // 判断当前用户是否有该应用id + + + loginUser.setCurrentAppId(updateUserOrgAppRequest.getNewAppId()); + } + + sessionManagerApi.updateSession(loginUser.getToken(), loginUser); + } + /** * 填充用户的基本姓名和头像信息 *