From 63f339ef4a79b5e1b7d216e45ccc3fbcf55fa7b5 Mon Sep 17 00:00:00 2001 From: lilong Date: Wed, 9 Oct 2024 14:44:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:(feature/REQ-3010)=20=E8=BF=81=E7=A7=BBpud?= =?UTF-8?q?ge=20=E6=9D=83=E9=99=90=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tyr-api/pom.xml | 4 + .../axzo/tyr/client/common/SaasRoleFits.java | 184 +++++++++++ .../cn/axzo/tyr/client/feign/SaasAuthApi.java | 27 ++ .../axzo/tyr/client/feign/SaasFeatureApi.java | 25 ++ .../client/feign/SaasPositionTemplateApi.java | 26 ++ .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 39 +++ .../client/feign/SaasRoleUserRelationApi.java | 20 ++ .../client/model/enums/FeatureTypeEnum.java | 28 ++ .../client/model/enums/SaasJobTypeEnum.java | 45 +++ .../enums/WorkspaceTypeWithLegacyEnum.java | 53 ++++ .../permission/AccountBindPersonReq.java | 30 ++ .../model/permission/AccountUserReq.java | 42 +++ .../permission/ApplicationFeatureRes.java | 64 ++++ .../permission/BaseAuthorizationReq.java | 57 ++++ .../model/permission/BaseIdentityReq.java | 28 ++ .../model/permission/CommonUserReq.java | 30 ++ .../CommonWorkspaceIdAndOuIdReq.java | 22 ++ .../permission/CreatePermissionGroupReq.java | 30 ++ .../model/permission/CreateResRoleDTO.java | 16 + .../model/permission/CreateRoleReq.java | 46 +++ .../permission/CreateWorkspaceAdminDto.java | 34 ++ .../model/permission/DecodeQrCodeBo.java | 27 ++ .../permission/DeletePermissionGroupReq.java | 18 ++ .../model/permission/DeleteRoleOfUserReq.java | 15 + .../permission/FeatureByIdentityResp.java | 23 ++ .../permission/FeatureIdAndFeaturePathBO.java | 24 ++ .../model/permission/FeatureItemResp.java | 39 +++ .../permission/FeaturePermissionReq.java | 50 +++ .../permission/FeaturePermissionRes.java | 24 ++ .../permission/FilterFeatureTreeReq.java | 44 +++ .../permission/FindUserWorkspaceRoleReq.java | 20 ++ .../permission/GargantuanRoleQueryReq.java | 22 ++ .../permission/GrantAgencyAdminRoleDTO.java | 69 ++++ .../model/permission/GrantRoleToUserReq.java | 21 ++ .../model/permission/GroupPermissionResp.java | 39 +++ .../permission/IdentityAndAccountDTO.java | 49 +++ .../permission/IdentityAndAccountResp.java | 49 +++ .../client/model/permission/IdentityKey.java | 19 ++ .../tyr/client/model/permission/JobDto.java | 34 ++ .../client/model/permission/LeaderResp.java | 40 +++ .../client/model/permission/ListRoleReq.java | 27 ++ .../client/model/permission/ListRoleRes.java | 21 ++ .../model/permission/ListUserRoleReq.java | 28 ++ .../model/permission/LoginLogSaveDTO.java | 33 ++ .../model/permission/LoginSuccessBo.java | 23 ++ .../model/permission/MergeAccountReq.java | 30 ++ .../model/permission/MoveFeatureReq.java | 21 ++ .../model/permission/NativeFeatureResp.java | 24 ++ .../model/permission/OperateLogQueryReq.java | 79 +++++ .../model/permission/OperateLogQueryResp.java | 51 +++ .../permission/OwnSpaceAndOuInfoDTO.java | 28 ++ .../permission/OwnSpaceAndOuInfoResp.java | 28 ++ .../model/permission/PageDefaultDto.java | 12 + .../permission/PagePermissionGroupReq.java | 19 ++ .../model/permission/PayoffRoleResp.java | 54 ++++ .../model/permission/PermissionCheckBO.java | 31 ++ .../model/permission/ProductAndFeatureBO.java | 24 ++ .../permission/ProductAndFeaturePathBO.java | 24 ++ .../model/permission/ProductQueryReq.java | 22 ++ .../model/permission/ProductQueryResp.java | 44 +++ .../tyr/client/model/permission/QrCodeBo.java | 23 ++ .../model/permission/QueryFeatureReq.java | 14 + .../QueryIdentityByPermissionDTO.java | 46 +++ .../QueryIdentityByPermissionReq.java | 101 ++++++ .../QueryPermissionGroupByCategoryIdReq.java | 17 + .../model/permission/QueryProductReq.java | 29 ++ .../model/permission/QueryRoleByNameReq.java | 69 ++++ .../model/permission/QueryRoleByNameResp.java | 30 ++ .../permission/QueryRoleTemplateReq.java | 24 ++ ...sPermissionGroupInPositionTemplateReq.java | 50 +++ .../QuerySaasRoleByIdentityListDTO.java | 38 +++ .../model/permission/QueryUserRoleReq.java | 43 +++ .../model/permission/RemoveTokenDto.java | 26 ++ .../client/model/permission/RoleBaseInfo.java | 32 ++ .../RoleByIdentityIdAndWorkspaceIdReq.java | 28 ++ .../tyr/client/model/permission/RoleResp.java | 36 +++ .../model/permission/RoleTemplateResp.java | 33 ++ .../model/permission/SaasFeatureBO.java | 100 ++++++ .../model/permission/SaasFeatureDTO.java | 64 ++++ .../permission/SaasFeatureSearchDTO.java | 24 ++ .../model/permission/SaasFeatureTreeResp.java | 179 +++++++++++ .../permission/SaasHierarchyFeatureBO.java | 103 ++++++ .../permission/SaasPermissionGroupBO.java | 75 +++++ ...SaasPermissionGroupInPositionTemplate.java | 33 ++ .../permission/SaasPositionTemplateExBO.java | 45 +++ .../permission/SaasPositionTemplateReq.java | 26 ++ .../permission/SaasRoleAndIdentityBO.java | 29 ++ .../client/model/permission/SaasRoleBO.java | 62 ++++ .../permission/SaasRoleCreateOrUpdateReq.java | 95 ++++++ .../client/model/permission/SaasRoleDTO.java | 70 ++++ .../model/permission/SaasRoleDelDTO.java | 35 ++ .../model/permission/SaasRoleDetailResp.java | 41 +++ .../client/model/permission/SaasRoleExBO.java | 61 ++++ .../model/permission/SaasRoleExReq.java | 21 ++ .../model/permission/SaasRoleInfoResp.java | 25 ++ .../model/permission/SaasRoleJobInfoResp.java | 22 ++ .../permission/SaasRoleOuBatchDelDTO.java | 36 +++ .../model/permission/SaasRoleQueryDTO.java | 48 +++ .../client/model/permission/SaasRoleResp.java | 34 ++ .../permission/SaasUserPermissionBO.java | 103 ++++++ .../permission/SaasUserPermissionReq.java | 31 ++ .../permission/SaasUserWithEntProjectBO.java | 34 ++ .../model/permission/SuperAminInfoResp.java | 42 +++ .../permission/UpdatePermissionGroupReq.java | 38 +++ .../UpdateWorkspaceSupAdminDTO.java | 46 +++ .../client/model/permission/UserInfoDto.java | 32 ++ .../permission/UserRoleRelationApiDto.java | 29 ++ .../permission/WorkspaceAndOuFeatureBO.java | 29 ++ .../permission/WorkspaceAndOuFeatureIdBO.java | 23 ++ .../permission/WorkspaceChangerAdminReq.java | 23 ++ .../permission/WorkspaceCreateAdminReq.java | 27 ++ .../WorkspaceCreateOrUpdateAdminReq.java | 38 +++ .../WorkspaceCreateOrUpdateAdminResp.java | 30 ++ .../WorkspaceGrantAdminRoleByPhoneReq.java | 51 +++ .../WorkspaceGrantAdminRoleReq.java | 48 +++ .../permission/WorkspaceTemplateInitReq.java | 29 ++ .../WorkspaceUpdateUserRoleDTO.java | 46 +++ .../permission/WorkspaceWorkTeamRoleResp.java | 40 +++ .../permission/SaasAuthApiImpl.java | 88 ++++++ .../permission/SaasFeatureApiImpl.java | 83 +++++ .../SaasPositionTemplateV2ApiImpl.java | 78 +++++ .../permission/SaasRoleApiImpl.java | 163 ++++++++++ .../SaasRoleUserRelationApiImpl.java | 24 ++ .../tyr/server/model/QueryUserRoleReq.java | 43 +++ .../tyr/server/model/SaasUserRoleExBO.java | 146 +++++++++ .../server/repository/dao/SaasFeatureDao.java | 1 + .../dao/SaasRoleUserRelationDao.java | 23 ++ .../dao/impl/SaasFeatureDaoImpl.java | 5 + .../mapper/SaasRoleUserRelationMapper.java | 9 + .../tyr/server/service/SaasAuthService.java | 62 ++++ .../tyr/server/service/SaasRoleService.java | 76 +++++ .../service/SaasRoleUserRelationService.java | 19 +- .../service/impl/ContextAwareBaseService.java | 52 +++ .../service/impl/SaasAuthServiceImpl.java | 299 ++++++++++++++++++ .../service/impl/SaasRoleServiceImpl.java | 291 +++++++++++++++++ .../impl/SaasRoleUserRelationServiceImpl.java | 40 +++ .../mapper/SaasRoleUserRelationMapper.xml | 104 ++++++ 137 files changed, 6309 insertions(+), 2 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/common/SaasRoleFits.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasAuthApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasFeatureApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPositionTemplateApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleUserRelationApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureTypeEnum.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/SaasJobTypeEnum.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/WorkspaceTypeWithLegacyEnum.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/AccountBindPersonReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/AccountUserReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ApplicationFeatureRes.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/BaseAuthorizationReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/BaseIdentityReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CommonUserReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CommonWorkspaceIdAndOuIdReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreatePermissionGroupReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateResRoleDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateRoleReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateWorkspaceAdminDto.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DecodeQrCodeBo.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DeletePermissionGroupReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DeleteRoleOfUserReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureByIdentityResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureIdAndFeaturePathBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureItemResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeaturePermissionReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeaturePermissionRes.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FilterFeatureTreeReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FindUserWorkspaceRoleReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GargantuanRoleQueryReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GrantAgencyAdminRoleDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GrantRoleToUserReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GroupPermissionResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityAndAccountDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityAndAccountResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityKey.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/JobDto.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LeaderResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListRoleReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListRoleRes.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListUserRoleReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LoginLogSaveDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LoginSuccessBo.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/MergeAccountReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/MoveFeatureReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/NativeFeatureResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OperateLogQueryReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OperateLogQueryResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OwnSpaceAndOuInfoDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OwnSpaceAndOuInfoResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PageDefaultDto.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PagePermissionGroupReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PayoffRoleResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionCheckBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductAndFeatureBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductAndFeaturePathBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductQueryReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductQueryResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QrCodeBo.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryFeatureReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryIdentityByPermissionDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryIdentityByPermissionReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryPermissionGroupByCategoryIdReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryProductReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleByNameReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleByNameResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleTemplateReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QuerySaasPermissionGroupInPositionTemplateReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QuerySaasRoleByIdentityListDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryUserRoleReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RemoveTokenDto.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleBaseInfo.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleByIdentityIdAndWorkspaceIdReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleTemplateResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureSearchDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureTreeResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasHierarchyFeatureBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPermissionGroupBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPermissionGroupInPositionTemplate.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPositionTemplateExBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPositionTemplateReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleAndIdentityBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleCreateOrUpdateReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDelDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDetailResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleExBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleExReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleInfoResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleJobInfoResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleOuBatchDelDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleQueryDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserPermissionBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserPermissionReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserWithEntProjectBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SuperAminInfoResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UpdatePermissionGroupReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UpdateWorkspaceSupAdminDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UserInfoDto.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UserRoleRelationApiDto.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceAndOuFeatureBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceAndOuFeatureIdBO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceChangerAdminReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateAdminReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateOrUpdateAdminReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateOrUpdateAdminResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceGrantAdminRoleByPhoneReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceGrantAdminRoleReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceTemplateInitReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceUpdateUserRoleDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceWorkTeamRoleResp.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasAuthApiImpl.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasFeatureApiImpl.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasPositionTemplateV2ApiImpl.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasRoleApiImpl.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasRoleUserRelationApiImpl.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/model/QueryUserRoleReq.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/model/SaasUserRoleExBO.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasAuthService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ContextAwareBaseService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasAuthServiceImpl.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleServiceImpl.java diff --git a/tyr-api/pom.xml b/tyr-api/pom.xml index 56cc7297..013b73b1 100644 --- a/tyr-api/pom.xml +++ b/tyr-api/pom.xml @@ -32,6 +32,10 @@ dao-support-lib 2.0.0-SNAPSHOT + + cn.axzo.basics + basics-profiles-common + diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/SaasRoleFits.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/SaasRoleFits.java new file mode 100644 index 00000000..4057081a --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/SaasRoleFits.java @@ -0,0 +1,184 @@ +package cn.axzo.tyr.client.common; + +import cn.axzo.basics.common.constant.enums.OrganizationalNodeTypeEnum; +import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.stream.Collectors; + +public class SaasRoleFits { + private static Map ouTypeMap = new HashMap<>(); + private static Map ouTypeValueToBitMap = new HashMap<>(); + static { + ouTypeMap.put(1L, OrganizationalUnitTypeEnum.PRIMARY_CONTRACTING_UNIT); //总包 + ouTypeMap.put(2L, OrganizationalUnitTypeEnum.CONSTRUCTION_UNIT); //建设单位 + ouTypeMap.put(4L, OrganizationalUnitTypeEnum.SUPERVISION_UNIT); //监理单位 + ouTypeMap.put(8L, OrganizationalUnitTypeEnum.LABOR_SUBCONTRACTING); //劳务分包 + ouTypeMap.put(16L, OrganizationalUnitTypeEnum.PROFESSIONAL_SUBCONTRACTING); //专业分包 + ouTypeMap.put(32L, OrganizationalUnitTypeEnum.PROJECT_OUT_TEAM); //平台班组 + ouTypeMap.put(64L, OrganizationalUnitTypeEnum.AXZ_PLATFORM); //平台班组 + + for(Entry e : ouTypeMap.entrySet()) + ouTypeValueToBitMap.put(e.getValue().getValue(), e.getKey()); + } + + static Map ouNodeTypeMap = new HashMap<>(); + private static Map ouNodeTypeValueToBitMap = new HashMap<>(); + static { + ouNodeTypeMap.put(1L, OrganizationalNodeTypeEnum.DEPARTMENT); // 部门 + ouNodeTypeMap.put(2L, OrganizationalNodeTypeEnum.TEAM); //班组 + ouNodeTypeMap.put(3L, OrganizationalNodeTypeEnum.GROUP); // 小组 + ouNodeTypeMap.put(4L, OrganizationalNodeTypeEnum.PROJECT_TEAM); // 项目内班组 + ouNodeTypeMap.put(5L, OrganizationalNodeTypeEnum.PROJECT_GROUP); // 项目内小组 + + for(Entry e : ouNodeTypeMap.entrySet()) + ouNodeTypeValueToBitMap.put(e.getValue().getValue(), e.getKey()); + } + + public static List splitToFitOuTypeEnums(Long fitOuType) { + if (isZero(fitOuType)) { + return new ArrayList<>(ouTypeMap.values()); + } + List list = toListByCheckBit(fitOuType, ouTypeMap); + return list; + } + + public static List splitToFitOuTypeValues(Long fitOuType) { + if (isZero(fitOuType)) { + return ouTypeMap.values().stream().map(OrganizationalUnitTypeEnum::getValue) + .collect(Collectors.toList()); + } + List list = toListByCheckBit(fitOuType, ouTypeMap); + return list.stream().map(OrganizationalUnitTypeEnum::getValue).collect(Collectors.toList()); + } + + public static List splitToFitOuNodeTypeValues(Long fitOuNodeType) { + if (isZero(fitOuNodeType)) { + return ouNodeTypeMap.values().stream().map(OrganizationalNodeTypeEnum::getValue) + .collect(Collectors.toList()); + } + List list = toListByCheckBit(fitOuNodeType, ouNodeTypeMap); + return list.stream().map(OrganizationalNodeTypeEnum::getValue).collect(Collectors.toList()); + } + + public static List splitToFitOuNodeTypeEnums(Long fitOuNodeType) { + if (isZero(fitOuNodeType)) { + return new ArrayList<>(ouNodeTypeMap.values()); + } + List list = toListByCheckBit(fitOuNodeType, ouNodeTypeMap); + return list; + } + + public static Long concatFitOuTypeByList(List fitOuTypeList) { + if (CollectionUtils.isEmpty(fitOuTypeList)) { + return Long.valueOf(OrganizationalUnitTypeEnum.ALL_TYPE.getBitValue()); + } + Set set = new HashSet<>(fitOuTypeList); + Long result = 0L; + for (OrganizationalUnitTypeEnum type : set) { + result += ouTypeValueToBitMap.get(type.getValue()); + } + return result; + } + + public static Long concatFitOuNodeTypeByList(List fitOuNodeTypeList) { + if (CollectionUtils.isEmpty(fitOuNodeTypeList)) { + return Long.valueOf(OrganizationalNodeTypeEnum.ALL_TYPE.getBitValue()); + } + Set set = new HashSet<>(fitOuNodeTypeList); + Long result = 0L; + for (OrganizationalNodeTypeEnum type : set) { + result += ouNodeTypeValueToBitMap.get(type.getValue()); + } + return result; + } + + public static Long concatFitOuTypeByValues(List fitOuTypeList) { + if (CollectionUtils.isEmpty(fitOuTypeList)) { + return Long.valueOf(OrganizationalUnitTypeEnum.ALL_TYPE.getBitValue()); + } + Set set = new HashSet<>(fitOuTypeList); + Long result = 0L; + for(Integer type : set) { + result |= ouTypeValueToBitMap.get(type); + } + return result; + } + + public static Long concatFitOuNodeTypeByValues(List fitOuNodeTypeList) { + if (CollectionUtils.isEmpty(fitOuNodeTypeList)) { + return Long.valueOf(OrganizationalNodeTypeEnum.ALL_TYPE.getBitValue()); + } + Set set = new HashSet<>(fitOuNodeTypeList); + Long result = 0L; + for (Integer type : set) { + result |= ouNodeTypeValueToBitMap.get(type); + } + return result; + } + + public static boolean isFitOuType(Long fitOuTypeBit, Integer ouType) { + if (fitOuTypeBit == null || fitOuTypeBit == 0 || fitOuTypeBit == 65535L) { + return true; + } + Long bit = ouTypeValueToBitMap.get(ouType); + long result = bit & fitOuTypeBit; + return result > 0; + } + + public static boolean isFitOuNodeType(Long fitOuNodeTypeBit, Integer ouNodeType) { + if (fitOuNodeTypeBit == null || fitOuNodeTypeBit == 0 || fitOuNodeTypeBit == 65535L) { + return true; + } + Long bit = ouNodeTypeValueToBitMap.get(ouNodeType); + long result = bit & fitOuNodeTypeBit; + return result > 0; + } + + ///以下是工具函数 + + private static boolean isZero(Long l) { + if (l == null) { + return true; + } + if (l == 0L) { + return true; + } + if (l == 65535L) { + return true; + } + return false; + } + + private static List toListByCheckBit(Long fitOuType, Map map) { + if(fitOuType == null || fitOuType == 0L) + return Collections.emptyList(); + + List list = new ArrayList<>(); + for(Long key : map.keySet()) { + long result = fitOuType & key; + if(result > 0L) { + list.add(map.get(key)); + } + } + return list; + } + + + public static void main(String[] args) { + List list = SaasRoleFits.splitToFitOuTypeValues(1+2+4L); + System.out.println(list); + Long value = SaasRoleFits.concatFitOuNodeTypeByValues(list); + System.out.println(value); + } + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasAuthApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasAuthApi.java new file mode 100644 index 00000000..7879298a --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasAuthApi.java @@ -0,0 +1,27 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.tyr.client.model.permission.IdentityAndAccountResp; +import cn.axzo.tyr.client.model.permission.IdentityKey; +import cn.axzo.tyr.client.model.permission.QueryIdentityByPermissionReq; +import cn.azxo.framework.common.model.CommonResponse; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import javax.validation.Valid; +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/6/9 14:40 + * @description : 权限-与人相关 + */ +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") +public interface SaasAuthApi { + + @PostMapping("api/feature/findIdentityKeysByParams") + CommonResponse> findIdentityKeysByParams(@RequestBody @Valid QueryIdentityByPermissionReq req); + + @PostMapping("api/feature/findIdentityAndAccountInfosByParams") + CommonResponse> findIdentityAndAccountInfosByParams(@RequestBody @Valid QueryIdentityByPermissionReq req); +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasFeatureApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasFeatureApi.java new file mode 100644 index 00000000..af56b906 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasFeatureApi.java @@ -0,0 +1,25 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.tyr.client.model.permission.ApplicationFeatureRes; +import cn.azxo.framework.common.model.CommonResponse; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * @author cn + * @version 1.0 + * @description + * @date 11/23/2022 11:06 AM + */ +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") +public interface SaasFeatureApi { + + /** + * 获取所有原生和小程序 (只取第二级数据 防止菜单配置错误 如下 (模块-小程序-小程序)) + */ + @PostMapping("/api/app/application/feature") + CommonResponse> getAppApplicationFeature(@RequestBody List terminals); +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPositionTemplateApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPositionTemplateApi.java new file mode 100644 index 00000000..4a9f9b20 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPositionTemplateApi.java @@ -0,0 +1,26 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.tyr.client.model.permission.SaasPositionTemplateExBO; +import cn.axzo.tyr.client.model.permission.SaasPositionTemplateReq; +import cn.azxo.framework.common.model.CommonResponse; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * 职位模板、职位模板的权限树相关的API + **/ +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") +public interface SaasPositionTemplateApi { + + /** + * 查询 职位,权限集分类,权限集 + * @param req + * @return + */ + @PostMapping("api/saas/positionTemplate/list") + CommonResponse> findPositionTemplateWithPermissionGroup(@RequestBody SaasPositionTemplateReq req); + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java new file mode 100644 index 00000000..9f481eb1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -0,0 +1,39 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.tyr.client.model.permission.IdentityAndAccountResp; +import cn.axzo.tyr.client.model.permission.WorkspaceGrantAdminRoleByPhoneReq; +import cn.axzo.tyr.client.model.permission.WorkspaceGrantAdminRoleReq; +import cn.azxo.framework.common.model.CommonResponse; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import javax.validation.Valid; +import java.util.List; + +/** + * + * 2022-06-13,高伟、陈亮、谭杰,评审了此API + * + * @author : liuchuntao + * @description : saas角色处理 + */ +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") +@Validated +public interface SaasRoleApi { + + /** + * workpaceId + ownerOuId + roleId + identifyId 赋予角色(支持角色赋予的同时 角色创建) + * work for: 组织 + 服务包 + */ + @PostMapping("api/saas/role/grantAdminRole") + CommonResponse grantAdminRole(@RequestBody @Valid List req); + + /** + * workpaceId + ownerOuId + roleId + 手机号 + 姓名 赋予角色(支持角色赋予的同时 角色创建) + * work for: 组织 + 服务包 + */ + @PostMapping("api/saas/role/grantAdminRoleByPhone") + CommonResponse> grantAdminRoleByPhone(@RequestBody @Valid List req); +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleUserRelationApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleUserRelationApi.java new file mode 100644 index 00000000..d912a4c0 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleUserRelationApi.java @@ -0,0 +1,20 @@ +package cn.axzo.tyr.client.feign; + +import cn.azxo.framework.common.model.CommonResponse; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author yanglin + */ +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") +public interface SaasRoleUserRelationApi { + + /** + * 用户帐户注销 + */ + @PostMapping("api/roleUserRelation/deleteByPersonId") + CommonResponse deleteByPersonId(@RequestParam("personId") Long personId); + +} \ No newline at end of file diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureTypeEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureTypeEnum.java new file mode 100644 index 00000000..7d542211 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureTypeEnum.java @@ -0,0 +1,28 @@ +package cn.axzo.tyr.client.model.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum FeatureTypeEnum { + + /** + * 0.模块 1.菜单 2页面 3功能 + */ + /** + * 枚举值 + */ + MODEL(0,"模块"), + MENU(1,"菜单"), + PAGE(2,"2页面"), + FEATURE(3,"页面元素"); + + @EnumValue + @JsonValue //标记json返回的值 + public final Integer code; + + public final String name; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/SaasJobTypeEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/SaasJobTypeEnum.java new file mode 100644 index 00000000..aec9f007 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/SaasJobTypeEnum.java @@ -0,0 +1,45 @@ +package cn.axzo.tyr.client.model.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * @author tanjie@axzo.cn + * @date 2022/10/10 10:50 + */ +@Getter +@RequiredArgsConstructor +public enum SaasJobTypeEnum { + //主岗 + MASTER_JOB(1,"岗位"), + //兼岗 + SLAVE_JOB(2,"协助岗位"); + @EnumValue + @JsonValue + private Integer value; + private String desc; + + + SaasJobTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static SaasJobTypeEnum create(Integer value){ + return match(value); + } + + public static SaasJobTypeEnum match(Integer saasJobType) { + return Arrays.stream(values()).filter(e -> e.getValue().equals(saasJobType)).findFirst().get(); + } + + public boolean isMaster() { + return value.equals(MASTER_JOB.getValue()); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/WorkspaceTypeWithLegacyEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/WorkspaceTypeWithLegacyEnum.java new file mode 100644 index 00000000..d054ae8a --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/WorkspaceTypeWithLegacyEnum.java @@ -0,0 +1,53 @@ +package cn.axzo.tyr.client.model.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 在 3A 里面这个类的 code 值可以直接对应到 workspaceType + * + * 尽量不用枚举的文字,用数字就好。 + * + * + */ +@Getter +public enum WorkspaceTypeWithLegacyEnum { + + /** + * 枚举值 + */ + ENT_SPACE(1, "CEMS"), + PROJ_SPACE(2, "CMS"), + OMS_SPACE(6, "OMS"); + + @EnumValue + @JsonValue //标记json返回的值 + private final Integer code; + + private final String name; + + + WorkspaceTypeWithLegacyEnum(Integer code, String name) { + this.code = code; + this.name = name; + } + + private static Map map = null; + + public static WorkspaceTypeWithLegacyEnum getByCode(Integer code) { + if (map == null) { + map = Arrays.stream(values()).collect(Collectors.toMap(WorkspaceTypeWithLegacyEnum::getCode, Function.identity())); + } + return map.get(code); + } + + public boolean isCmsProject() { + return this.equals(WorkspaceTypeWithLegacyEnum.PROJ_SPACE); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/AccountBindPersonReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/AccountBindPersonReq.java new file mode 100644 index 00000000..b9b943b6 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/AccountBindPersonReq.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.client.model.permission; + +import javax.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/11 14:09 + * @description : 账户绑定自然人 + */ +@Data +public class AccountBindPersonReq { + + /** + * 账户Id + */ + private Long accountId; + + /** + * 手机号 + */ + private String phone; + + /** + * 自然人Id + */ + @NotNull(message = "自然人Id不能为空") + private Long naturalPersonId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/AccountUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/AccountUserReq.java new file mode 100644 index 00000000..438c8a3a --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/AccountUserReq.java @@ -0,0 +1,42 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author : liuchuntao + * @date : 2022/5/11 10:56 + * @description : 创建账户Req + */ +@Data +public class AccountUserReq { + + /** + * 手机号 + */ + @NotNull(message = "手机号不能为空") + private String phone; + + private String realName; + + /** + * 昵称,历史数据里是真实姓名,未来可以给用户自己定义 + */ + private String nickname; + + + /** + * 自然人Id + */ + private Long naturalPersonId; + + /** + * 创建账号的类型,目前只有在运营人员场景使用 + * 0.从业人员 + * 1.运营人员 + * 3.监管人员 + */ + private Integer type=0; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ApplicationFeatureRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ApplicationFeatureRes.java new file mode 100644 index 00000000..67ce11e1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ApplicationFeatureRes.java @@ -0,0 +1,64 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ApplicationFeatureRes { + + /** + * 菜单id + */ + private Long featureId; + + /** + * 菜单名称 + */ + private String featureName; + + /** + * 父节点菜单id + */ + private Long parentFeatureId; + + /** + * 父节点菜单名称 + */ + private String parentFeatureName; + + /** + * 图标名(原生使用) + * 小程序使用自己配置中的图标 + */ + private String icon; + + /** + * 1:cms 2:小程序 4:原生 如果菜单同时又对应app上展示 则填写对应linkUrl 和linkExt + */ + private Integer linkType; + + /** + * 小程序id(小程序使用 关联micro_app_item id) + */ + private String microAppItemId; + + /** + * 路由地址(小程序使用) + */ + private String linkUrl; + + /** + * 扩展字段(原生使用) + */ + private String linkExt; + + /** + * 端 + */ + private String terminal; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/BaseAuthorizationReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/BaseAuthorizationReq.java new file mode 100644 index 00000000..2d77d6d4 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/BaseAuthorizationReq.java @@ -0,0 +1,57 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author : liuchuntao + * @date : 2022/6/14 18:37 + * @description : 获取权限信息基础参数 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class BaseAuthorizationReq { + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 + */ + private IdentityType identityType; + private Integer identityTypeInt; + + public Integer getIdentityTypeInt() { + if (identityType == null) { + return null; + } + + return identityType.getCode(); + } + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + + /** + * 指定端的权限 + */ + private String terminal; + + + private Integer ouType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/BaseIdentityReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/BaseIdentityReq.java new file mode 100644 index 00000000..e6a2dd20 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/BaseIdentityReq.java @@ -0,0 +1,28 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/6/5 10:53 + * @description : 账号合并身份信息 + */ +@Data +public class BaseIdentityReq { + + /** + * 原身份Id + */ + private Long oldIdentityId; + + /** + * 新身份Id + */ + private Long newIdentityId; + + /** + * 身份类型 + */ + private Integer identityType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CommonUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CommonUserReq.java new file mode 100644 index 00000000..79db1e43 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CommonUserReq.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class CommonUserReq { + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 + */ + private IdentityType identityType; + + /** + * 指定端的权限 + */ + private String terminal; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CommonWorkspaceIdAndOuIdReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CommonWorkspaceIdAndOuIdReq.java new file mode 100644 index 00000000..6c22ff33 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CommonWorkspaceIdAndOuIdReq.java @@ -0,0 +1,22 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * 这个类只有两个字段 。如果需要增加字段的,请写新类继承它 + */ +@Data +public class CommonWorkspaceIdAndOuIdReq { + + /** + * 工作台id + */ + private Long workspaceId; + + /** + * 单位id : 非必填 + */ + private Long ouId; + + // 这个类只有两个字段 。如果需要增加字段的,请写新类继承它 +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreatePermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreatePermissionGroupReq.java new file mode 100644 index 00000000..71fd6a7b --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreatePermissionGroupReq.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.client.model.permission; + +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + */ +@Data +public class CreatePermissionGroupReq{ + + /** + * 权限集名称 + */ + @NotBlank(message = "权限集名称不能为空") + @Length(max = 20, message = "权限集名称不能超过20个字符") + private String name; + /** + * 权限集的具体权限对应的功能id 列表 + */ + @NotEmpty(message = "权限集不能为空") + private List featureIds; + + /** + * 备注 + */ + private String description; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateResRoleDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateResRoleDTO.java new file mode 100644 index 00000000..64608c61 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateResRoleDTO.java @@ -0,0 +1,16 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author: wangli + * @date: 2022/5/27 15:42 + */ +@Data +public class CreateResRoleDTO { + + /** + * 工作台ID + */ + private Long workspaceId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateRoleReq.java new file mode 100644 index 00000000..352553b6 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateRoleReq.java @@ -0,0 +1,46 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/5/19 15:35 + * @description : + */ +@Data +public class CreateRoleReq { + + @NotNull(message = "身份Id不能为空") + private Long identityId; + + @NotNull(message = "身份类型不能为空") + private Long identityType; + /** + * 自然人Id + */ + @NotNull(message = "自然人Id不能为空") + private Long naturalPersonId; + /** + * 手机号 + */ + @NotNull(message = "手机号不能为空") + private String phone; + + @NotEmpty(message = "角色Id集合不能为空") + private List roleIds; + + + @NotNull(message = "工作台Id不能为空") + private Long workspaceId; + + /** + * 单位Id + */ + @NotNull(message = "单位Id不能为空") + private Long organizationalUnitId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateWorkspaceAdminDto.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateWorkspaceAdminDto.java new file mode 100644 index 00000000..7b63e3cd --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/CreateWorkspaceAdminDto.java @@ -0,0 +1,34 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/27 18:26 + * @description : + */ +@Data +public class CreateWorkspaceAdminDto { + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 + */ + private Integer identityType; + + + /** + * 工作台Id + */ + private Long workspaceId; + + + /** + * 单位Id + */ + private Long ouId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DecodeQrCodeBo.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DecodeQrCodeBo.java new file mode 100644 index 00000000..e5751acb --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DecodeQrCodeBo.java @@ -0,0 +1,27 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author zhangPeng + * @description + * @date 2021/1/26 17:22 + */ +@Data +public class DecodeQrCodeBo { + + /** + * 目标值 - 类型不同值不同 + */ + private String value; + + /** + * 类型 - personal(个人信息) - team(班组) - http(三方地址) + */ + private String type; + + /** + * 属于那一个平台的二维码 + */ + private String terminal; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DeletePermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DeletePermissionGroupReq.java new file mode 100644 index 00000000..ede31558 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DeletePermissionGroupReq.java @@ -0,0 +1,18 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + */ +@Data +public class DeletePermissionGroupReq { + + /** + * 主键id + */ + private Long id; + /** + * 权限集描述 + */ + private String description; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DeleteRoleOfUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DeleteRoleOfUserReq.java new file mode 100644 index 00000000..aa4cb631 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/DeleteRoleOfUserReq.java @@ -0,0 +1,15 @@ +package cn.axzo.tyr.client.model.permission; + +import java.util.List; +import lombok.Data; + +/** + */ +@Data +public class DeleteRoleOfUserReq { + + /** + * 用户角色关联关系的主键集合 + */ + private List ids; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureByIdentityResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureByIdentityResp.java new file mode 100644 index 00000000..23c4470b --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureByIdentityResp.java @@ -0,0 +1,23 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class FeatureByIdentityResp { + + private Long identityId; + + private IdentityType identityType; + + private List featureCodes; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureIdAndFeaturePathBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureIdAndFeaturePathBO.java new file mode 100644 index 00000000..33e57ee9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureIdAndFeaturePathBO.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class FeatureIdAndFeaturePathBO { + + /** + * 菜单id + */ + private Long featureId; + + /** + * 菜单表path字段 + */ + private String featurePath; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureItemResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureItemResp.java new file mode 100644 index 00000000..edea178e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeatureItemResp.java @@ -0,0 +1,39 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +/** + * @author: cl + * @description: 授权功能请求实体 + * @date: 2022-06-17 + **/ +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class FeatureItemResp { + + /** + * 是否授权 + */ + private Boolean isGrant; + + /** + * 功能编码 + */ + private String featureCode; + + /** + * 功能名称 + */ + private String featureName; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeaturePermissionReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeaturePermissionReq.java new file mode 100644 index 00000000..47561915 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeaturePermissionReq.java @@ -0,0 +1,50 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.FieldDefaults; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * @author cn + * @version 1.0 + * @description + * @date 2022/8/15 19:58 + */ +@Getter +@Setter +@ToString(callSuper = true) +@FieldDefaults(level = AccessLevel.PRIVATE) +public class FeaturePermissionReq { + /** + * 工作台id + */ + @NotNull + @Min(value = 1) + Long workspaceId; + /** + * 单位id + */ + @NotNull + @Min(value = 1) + Long ouId; + /** + * 指定端的权限 + */ + String terminal; + @NotNull + @Min(value = 1) + Long identityId; + @NotNull + @Min(value = 0) + Integer identityType; + + public IdentityType getIdentityTypeEnum() { + return IdentityType.getIdentityType(identityType); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeaturePermissionRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeaturePermissionRes.java new file mode 100644 index 00000000..31221fb5 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FeaturePermissionRes.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.FieldDefaults; + +import java.util.Set; + +/** + * @author cn + * @version 1.0 + * @description + * @date 11/23/2022 11:18 AM + */ +@Getter +@Setter +@ToString(callSuper = true) +@FieldDefaults(level = AccessLevel.PRIVATE) +public class FeaturePermissionRes { + boolean superAdmin = false; + Set permissionCodes; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FilterFeatureTreeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FilterFeatureTreeReq.java new file mode 100644 index 00000000..d6d02af4 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FilterFeatureTreeReq.java @@ -0,0 +1,44 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/6/14 18:37 + * @description : 获取权限信息基础参数 + */ +@Data +public class FilterFeatureTreeReq { + + /** + * 身份Id + */ + private Long identityId; + + private IdentityType identityType; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + + /** + * 指定端的权限 + */ + private String terminal; + + /** + * FeatureType: 类型 0.模块 1.菜单 2页面 3功能 + * 此字段=0,只返回模块,=1,返回到菜单级,=2,返回到页面级,=3,到功能级。 + * 此字段默认到功能级, (会做为递归的深度限制) + *------ + */ + private Integer limitFeatureTypeLevel = 3; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FindUserWorkspaceRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FindUserWorkspaceRoleReq.java new file mode 100644 index 00000000..5cc85da9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/FindUserWorkspaceRoleReq.java @@ -0,0 +1,20 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.page.PageRequest; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/21 15:35 + * @description :获取角色列表 + */ +@Data +public class FindUserWorkspaceRoleReq extends PageRequest { + + /** + * 关键字:暂定角色名称 + */ + private String keyWords; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GargantuanRoleQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GargantuanRoleQueryReq.java new file mode 100644 index 00000000..47b81967 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GargantuanRoleQueryReq.java @@ -0,0 +1,22 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.page.PageRequest; +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Data; + +@Data +public class GargantuanRoleQueryReq extends PageRequest { + + private String roleNameLike; + + private String userNameLike; + + private String workspaceType; + + private Long workspaceId; + + private Long ownerOuId; + + private IdentityType identityType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GrantAgencyAdminRoleDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GrantAgencyAdminRoleDTO.java new file mode 100644 index 00000000..3928ce42 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GrantAgencyAdminRoleDTO.java @@ -0,0 +1,69 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum; +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GrantAgencyAdminRoleDTO { + + /** + * 工作台id,与context校验 + */ + @NotNull(message = "工作台Id不能为空") + private Long workspaceId; + + /** + * 单位id : 必填 + */ + @NotNull(message = "单位Id不能为空") + private Long ouId; + + public OrganizationalUnitTypeEnum getOrganizationalUnitTypeEnum() { + return OrganizationalUnitTypeEnum.getByType(organizationalUnitType); + } + + /** + * 单位类型 + */ + @NotNull(message = "单位类型不能为空") + @Min(value = 1) + private Integer organizationalUnitType; + + /** + * 被赋予角色的人的身份类型 + */ + @NotNull(message = "身份类型不能为空") + private IdentityType identityType; + + /** + * 手机号 + */ + @NotBlank(message = "手机号不能为空") + private String phoneNo; + + /** + * 用户名 + */ + @NotBlank(message = "用户名不能为空") + private String userName; + + /** + * 之前的所有RoleId都被更新 + */ + @NotEmpty(message = "角色列表不能为空") + private List updateRoleIds; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GrantRoleToUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GrantRoleToUserReq.java new file mode 100644 index 00000000..4d96cf75 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GrantRoleToUserReq.java @@ -0,0 +1,21 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import java.util.List; + +/** + */ +@Data +public class GrantRoleToUserReq extends CommonWorkspaceIdAndOuIdReq { + private List roleIds; + + /** + * 身份Id + */ + private Long identityId; + /** + * 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员 + */ + private Integer identityType; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GroupPermissionResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GroupPermissionResp.java new file mode 100644 index 00000000..30e13451 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/GroupPermissionResp.java @@ -0,0 +1,39 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +/** + * @author: cl + * @description: 授权功能返回实体 + * @date: 2022-06-17 + **/ +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class GroupPermissionResp { + + /** + * 是否授权 + */ + private Boolean isGrant; + + /** + * 功能编码 + */ + private String groupPermissionId; + + /** + * 功能名称 + */ + private String groupPermissionName; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityAndAccountDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityAndAccountDTO.java new file mode 100644 index 00000000..c98201e6 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityAndAccountDTO.java @@ -0,0 +1,49 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.trade.datasecurity.core.annotation.CryptField; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/11 11:20 + * @description : + */ +@Data +public class IdentityAndAccountDTO { + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 + */ + private IdentityType identityType; + + /** + * 账户Id + */ + private Long accountId; + + /** + * 手机号 + */ + @CryptField + private String phone; + + + /** + * 真实姓名 + */ + private String realName; + + + /** + * 自然人Id + */ + private Long naturalPersonId; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityAndAccountResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityAndAccountResp.java new file mode 100644 index 00000000..01ff2273 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityAndAccountResp.java @@ -0,0 +1,49 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author : liuchuntao + * @date : 2022/5/11 11:20 + * @description : + */ +@Data +public class IdentityAndAccountResp implements Serializable { + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 + */ + private IdentityType identityType; + + /** + * 账户Id + * + * @deprecated 此字段业务中不要使用,全部用身份id来处理业务 + */ + @Deprecated + private Long accountId; + + /** + * 手机号 + */ + private String phone; + + /** + * 真实姓名 + */ + private String realName; + + /** + * 自然人Id + */ + private Long naturalPersonId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityKey.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityKey.java new file mode 100644 index 00000000..5eb6a63c --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/IdentityKey.java @@ -0,0 +1,19 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Data +public class IdentityKey { + + private Long identityId; + + private IdentityType identityType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/JobDto.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/JobDto.java new file mode 100644 index 00000000..83a3a271 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/JobDto.java @@ -0,0 +1,34 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.FieldDefaults; + +/** + * @author cn + * @version 1.0 + * @description + * @date 2022/10/12 15:23 + */ +@Getter +@Setter +@ToString +@FieldDefaults(level = AccessLevel.PRIVATE) +public class JobDto { + + /** + * 岗位id + */ + Long jobId; + /** + * 岗位code + */ + String jobCode; + /** + * 岗位名字 + */ + String jobName; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LeaderResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LeaderResp.java new file mode 100644 index 00000000..c7635c4f --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LeaderResp.java @@ -0,0 +1,40 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +/** + * @author: cl + * @description: 企业班组响应 + * @date: 2022-06-17 + **/ +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class LeaderResp { + + /** + * 身份ID + */ + private Long identityId; + + private IdentityType identityType; + + /** + * 角色名称 + */ + private String roleName; + /** + *角色ID + */ + private Long roleId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListRoleReq.java new file mode 100644 index 00000000..327e44e9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListRoleReq.java @@ -0,0 +1,27 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Set; + +/** + * @author cn + * @version 1.0 + * @description + * @date 2022/10/13 16:54 + */ +@Getter +@Setter +@ToString +public class ListRoleReq { + @NotNull + @Min(value = 0) + private Long workspaceId; + @NotEmpty + private Set roleIds; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListRoleRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListRoleRes.java new file mode 100644 index 00000000..e49edf9b --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListRoleRes.java @@ -0,0 +1,21 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * @author cn + * @version 1.0 + * @description + * @date 2022/10/13 16:54 + */ +@Getter +@Setter +@ToString +@EqualsAndHashCode +public class ListRoleRes { + private Long roleId; + private String jobCode; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListUserRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListUserRoleReq.java new file mode 100644 index 00000000..7786b974 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ListUserRoleReq.java @@ -0,0 +1,28 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Set; + +/** + * @author cn + * @version 1.0 + * @description + * @date 2022/10/14 11:52 + */ +@Getter +@Setter +@ToString +public class ListUserRoleReq { + @NotNull + @Min(value = 0) + private Long workspaceId; + private Long ouId; + @NotEmpty + private Set roleCodes; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LoginLogSaveDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LoginLogSaveDTO.java new file mode 100644 index 00000000..b2d20981 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LoginLogSaveDTO.java @@ -0,0 +1,33 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.manager.auth.base.UserContext; +import lombok.Data; + +/** + * @ClassName LoginLogSaveDTO + * @Author zhangran + * @Date 2022/6/11 18:14 + **/ +@Data +public class LoginLogSaveDTO { + + /** + * m账号 + */ + private String account; + + /** + * 登录状态:1-成功;2-失败 + */ + private Integer loginStatus; + /** + * 错误原因 + */ + private String failReason; + /** + * 平台 + */ + private String terminal; + + private UserContext userContext; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LoginSuccessBo.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LoginSuccessBo.java new file mode 100644 index 00000000..786cf56f --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/LoginSuccessBo.java @@ -0,0 +1,23 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author zhangPeng + * @description + * @date 2021/1/26 17:16 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class LoginSuccessBo { + private String accessToken; + /** + * 终端 + */ + private String terminal; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/MergeAccountReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/MergeAccountReq.java new file mode 100644 index 00000000..9739d9e9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/MergeAccountReq.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.client.model.permission; + +import java.util.List; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/6/5 10:50 + * @description :账号合并Req + */ +@Data +public class MergeAccountReq { + + /** + * 原自然人Id + */ + private Long oldPerSonId; + + + /** + * 新自然人Id + */ + private Long newPerSonId; + + + /** + * 身份列表 + */ + private List baseIdentity; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/MoveFeatureReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/MoveFeatureReq.java new file mode 100644 index 00000000..0728aeb8 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/MoveFeatureReq.java @@ -0,0 +1,21 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author haiyangjin + * @date 2023/8/23 + */ +@Data +public class MoveFeatureReq { +// @NotEmpty(message = "featureCode 不能为空") + private String featureCode; + + private String moveToFeatureCode; + + private Long id; + + private Long moveToId; + + private String token; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/NativeFeatureResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/NativeFeatureResp.java new file mode 100644 index 00000000..467a7158 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/NativeFeatureResp.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class NativeFeatureResp { + + /* + * 企业端菜单id + */ + private Long entFeatureId; + + /* + * 项目端菜单id + */ + private Long projFeatureId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OperateLogQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OperateLogQueryReq.java new file mode 100644 index 00000000..99e90a1a --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OperateLogQueryReq.java @@ -0,0 +1,79 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.page.PageRequest; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/6/28 20:08 + * @description : 操作日志请求参数 + */ +@Data +public class OperateLogQueryReq extends PageRequest { + + /** + * 调用方服务名 + */ + private String serviceName; + + /** + * 操作人 + */ + private String operateUserName; + + /** + * 事件类型 + */ + private List featureCodes; + + /** + * 功能name + */ + private String featureName; + + /** + * 开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTime; + + /** + * 结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endTime; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 + */ + private Integer identityType; + + /** + * 操作类型 1:add 2:add_batch 3:update 4:update_batch 5:delete 6:delete_batch + */ + private Integer operateType; + + /** + * 操作表名 + */ + private String operateTable; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OperateLogQueryResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OperateLogQueryResp.java new file mode 100644 index 00000000..e29a4ac8 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OperateLogQueryResp.java @@ -0,0 +1,51 @@ +package cn.axzo.tyr.client.model.permission; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * @author : liuchuntao + * @date : 2022/6/28 20:08 + * @description : 操作日志响应 + */ +@Data +public class OperateLogQueryResp { + + /** + * 操作人 + */ + private String operateUserName; + + /** + * 事件类型 + */ + private String featureCode; + + /** + * 事件类型 + */ + private String featureName; + + /** + * 事件摘要 + */ + private String contentSummary; + + /** + * 操作时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date operateTime; + + /** + * 操作人手机号 + */ + private String operateUserPhone; + + /** + * 所属单位名称 + */ + private String ouName; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OwnSpaceAndOuInfoDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OwnSpaceAndOuInfoDTO.java new file mode 100644 index 00000000..a6ba99be --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OwnSpaceAndOuInfoDTO.java @@ -0,0 +1,28 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/6/14 15:19 + * @description : 查询拥有权限的工作台和单位Id + */ +@Data +public class OwnSpaceAndOuInfoDTO { + + /** + * 工作台Id + */ + private Long workspaceType; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OwnSpaceAndOuInfoResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OwnSpaceAndOuInfoResp.java new file mode 100644 index 00000000..e70540c4 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/OwnSpaceAndOuInfoResp.java @@ -0,0 +1,28 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/6/14 15:19 + * @description : 查询拥有权限的工作台和单位Id + */ +@Data +public class OwnSpaceAndOuInfoResp { + + /** + * 工作台Id + */ + private Long workspaceType; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PageDefaultDto.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PageDefaultDto.java new file mode 100644 index 00000000..d7d54606 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PageDefaultDto.java @@ -0,0 +1,12 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.page.PageRequest; +import lombok.Data; + +/** + * @author hewei@axzo.cn + * @date 2022/12/6 10:28 + */ +@Data +public class PageDefaultDto extends PageRequest { +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PagePermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PagePermissionGroupReq.java new file mode 100644 index 00000000..19175831 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PagePermissionGroupReq.java @@ -0,0 +1,19 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.page.PageRequest; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/6/29 16:00 + * @description : 权限集分页搜索相关 + */ +@Data +public class PagePermissionGroupReq extends PageRequest { + + /** + * 搜索内容 + */ + private String searchKey; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PayoffRoleResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PayoffRoleResp.java new file mode 100644 index 00000000..a102ddfb --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PayoffRoleResp.java @@ -0,0 +1,54 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +/** + * @author: cl + * @description: 代班组权限响应 + * @date: 2022-06-17 + **/ +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class PayoffRoleResp { + + /** + * 单位id + */ + private Long ouId; + + /** + * 角色身份ID + */ + private Long identityId; + + /** + * 角色身份类型,用于检查是否匹配 + */ + private Integer identityType; + + /** + * 手机号 + */ + private String phone; + + /** + * 真实姓名 + */ + private String realName; + + /** + * 账户Id + */ + private Long accountId; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionCheckBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionCheckBO.java new file mode 100644 index 00000000..91c53e2b --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionCheckBO.java @@ -0,0 +1,31 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.framework.auth.domain.TerminalInfo; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Set; + +/** + * 鉴权处理对象 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2024/4/15 14:55 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PermissionCheckBO { + private Long personId; + private Long identityId; + private IdentityType identityType; + private Long ouId; + private Long workspaceId; + private Set featureCodes; + private TerminalInfo terminalInfo; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductAndFeatureBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductAndFeatureBO.java new file mode 100644 index 00000000..0d52fc0e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductAndFeatureBO.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductAndFeatureBO { + + /** + * 产品id + */ + private Long productId; + + /** + * 菜单id + */ + private Long featureId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductAndFeaturePathBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductAndFeaturePathBO.java new file mode 100644 index 00000000..809d727b --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductAndFeaturePathBO.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductAndFeaturePathBO { + + /** + * 产品id + */ + private Long productId; + + /** + * 菜单表path字段 + */ + private String featurePath; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductQueryReq.java new file mode 100644 index 00000000..478a01b8 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductQueryReq.java @@ -0,0 +1,22 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class ProductQueryReq { + + + /** + * 1:总包企业产品 2:总包项目产品 3:政企产品 4:分包企业产品 5:班组产品 + */ + @NotNull(message = "产品类型不能为空") + private Integer productType; + + /** + * 基础产品与否 0:基础产品 1:普通产品 + */ + private Integer commonProduct; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductQueryResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductQueryResp.java new file mode 100644 index 00000000..bba51ff3 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/ProductQueryResp.java @@ -0,0 +1,44 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import java.util.Date; + +/** + * @author : liuchuntao + * @date : 2022/5/18 18:50 + * @description : 产品查询响应 + */ +@Data +public class ProductQueryResp { + + protected Long id; + + /** + * 创建时间 + */ + protected Date createAt; + + /** + * 修改时间 + */ + protected Date updateAt; + + /** + * 1:总包企业产品 2:总包项目产品 3:政企产品 4:分包企业产品 5:班组产品 + */ + private Integer productType; + /** + * 产品板块名字 + */ + private String productName; + /** + * 基础产品与否 0:基础产品 1:普通产品 + */ + private Integer commonProduct; + /** + * 产品板块备注 + */ + private String remark; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QrCodeBo.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QrCodeBo.java new file mode 100644 index 00000000..1b9899a2 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QrCodeBo.java @@ -0,0 +1,23 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 二维码 + * + * @author liuyang + * @date 2020/6/15 + **/ +@NoArgsConstructor +@AllArgsConstructor +@Data +public class QrCodeBo { + + /** + * code码 + */ + private String code; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryFeatureReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryFeatureReq.java new file mode 100644 index 00000000..6cc45629 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryFeatureReq.java @@ -0,0 +1,14 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +@Data +public class QueryFeatureReq extends CommonWorkspaceIdAndOuIdReq { + + /** + * 是否查询子节点 0: 不查询: 1:查询( 默认0) + */ + private Integer loadChildrens = 0; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryIdentityByPermissionDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryIdentityByPermissionDTO.java new file mode 100644 index 00000000..76e9164d --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryIdentityByPermissionDTO.java @@ -0,0 +1,46 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Data; + +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/6/9 14:42 + * @description : 获取拥有指定权限的人员列表 + */ +@Data +public class QueryIdentityByPermissionDTO { + + /** + * 权限列表 + * Query的语义是:只要有一个code就算命中,而不是必须有所有code权限。 + */ + private List codes; + + private Long roleId; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + + /** + * 身份Id + */ + private Long identityId; + + private IdentityType identityType; + + /** + * 指定端的权限 + */ + private String terminal; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryIdentityByPermissionReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryIdentityByPermissionReq.java new file mode 100644 index 00000000..96c3a84b --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryIdentityByPermissionReq.java @@ -0,0 +1,101 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Data; + +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/6/9 14:42 + * @description : 获取拥有指定权限的人员列表 + */ +@Data +public class QueryIdentityByPermissionReq { + + /** + * 权限列表 + * Query的语义是:只要有一个code就算命中,而不是必须有所有code权限。 + */ + private List codes; + + private Long roleId; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + + /** + * 身份Id + */ + private Long identityId; + + private IdentityType identityType; + + /** + * 指定端的权限 + */ + private String terminal; + + public List getCodes() { + return codes; + } + + public void setCodes(List codes) { + this.codes = codes; + } + + public Long getRoleId() { + return roleId; + } + + public void setRoleId(Long roleId) { + this.roleId = roleId; + } + + public Long getWorkspaceId() { + return workspaceId; + } + + public void setWorkspaceId(Long workspaceId) { + this.workspaceId = workspaceId; + } + + public Long getOuId() { + return ouId; + } + + public void setOuId(Long ouId) { + this.ouId = ouId; + } + + public Long getIdentityId() { + return identityId; + } + + public void setIdentityId(Long identityId) { + this.identityId = identityId; + } + + public IdentityType getIdentityType() { + return identityType; + } + + public void setIdentityType(IdentityType identityType) { + this.identityType = identityType; + } + + public String getTerminal() { + return terminal; + } + + public void setTerminal(String terminal) { + this.terminal = terminal; + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryPermissionGroupByCategoryIdReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryPermissionGroupByCategoryIdReq.java new file mode 100644 index 00000000..57232453 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryPermissionGroupByCategoryIdReq.java @@ -0,0 +1,17 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import java.util.List; + +/** + * @author hewei@axzo.cn + * @date 2022/10/13 17:17 + */ +@Data +public class QueryPermissionGroupByCategoryIdReq { + + private Long productCategoryId; + + private List groupIds; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryProductReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryProductReq.java new file mode 100644 index 00000000..f45cdf97 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryProductReq.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.page.PageRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author hewei@axzo.cn + * @date 2022/10/11 16:33 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class QueryProductReq extends PageRequest { + + /** + * 功能分组id + */ + private Long productId; + /** + * 权限集id列表 + */ + private List groupIds; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleByNameReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleByNameReq.java new file mode 100644 index 00000000..c2181f80 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleByNameReq.java @@ -0,0 +1,69 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import org.springframework.util.CollectionUtils; + +import javax.validation.constraints.NotEmpty; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; + +/** + * @author : liuchuntao + * @date : 2022/6/27 14:05 + * @description : 通过角色名字查询角色信息 + */ +@Data +public class QueryRoleByNameReq extends CommonWorkspaceIdAndOuIdReq { + + @NotEmpty(message = "角色名字不能为空") + private List roleNames; + + /** + * 单位类型 + */ + private Set ouTypes; + + @JsonIgnore + public int getFitOuTypeBit() { + int fitOuTypeBit = 0; + if (!CollectionUtils.isEmpty(ouTypes)) { + Optional reduce = ouTypes.stream() + .map(OrganizationalUnitTypeEnum::getByType).filter(Objects::nonNull) + .map(OrganizationalUnitTypeEnum::getBitValue).reduce((a, b) -> { + a |= b; + return a; + }); + if (reduce.isPresent()) { + fitOuTypeBit = reduce.get(); + } + } + return fitOuTypeBit; + } + + /** + * 节点类型 + */ + private Set nodeTypes; + + @JsonIgnore + public int getFitNodeTypeBit() { + int fitOuNodeTypeBit = 0; + if (!CollectionUtils.isEmpty(nodeTypes)) { + Optional reduce = nodeTypes.stream() + .map(OrganizationalUnitTypeEnum::getByType).filter(Objects::nonNull) + .map(OrganizationalUnitTypeEnum::getBitValue).reduce((a, b) -> { + a |= b; + return a; + }); + if (reduce.isPresent()) { + fitOuNodeTypeBit = reduce.get(); + } + } + return fitOuNodeTypeBit; + } + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleByNameResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleByNameResp.java new file mode 100644 index 00000000..6f699b46 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleByNameResp.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + + +/** + * @author : liuchuntao + * @date : 2022/6/27 14:06 + * @description : 通过名字查询角色响应 + */ +@Data +public class QueryRoleByNameResp { + + /** + * 角色名字 + */ + private String roleName; + + /** + * 角色Id + */ + private Long roleId; + + /** + * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + */ + private String roleType; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleTemplateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleTemplateReq.java new file mode 100644 index 00000000..4a37d612 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryRoleTemplateReq.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.page.PageRequest; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/19 14:21 + * @description : 模板信息查询 + */ +@Data +public class QueryRoleTemplateReq extends PageRequest { + + /** + * 模板Id + */ + private Long templateId; + + /** + * 1:总包企业级 2:总包项目级 3:政企级 4:分包企业级 5:班组级 + */ + private Integer type; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QuerySaasPermissionGroupInPositionTemplateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QuerySaasPermissionGroupInPositionTemplateReq.java new file mode 100644 index 00000000..be28f4c9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QuerySaasPermissionGroupInPositionTemplateReq.java @@ -0,0 +1,50 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.util.List; + + +/** + * + * + * 用来查询基于PositionTemplate分配的Role、PermissionGroup。 + * + * @author gaowei + * + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class QuerySaasPermissionGroupInPositionTemplateReq { + + /** + * 项目部工作台ID,不可为空。 + */ + @NotNull + private Long workspaceId; + + /** + * 对应SaasRoleUserRelation表里的ouId + */ + private Long ouId; + + /** + * 身份ID,可以为空,为空则忽略此查询条件。 + */ + private List identityIds; + + private IdentityType identityType; + + /** + * 职位Code列表。 + * 可以为空,为空则忽略此查询条件。 + */ + private List positionCodeList; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QuerySaasRoleByIdentityListDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QuerySaasRoleByIdentityListDTO.java new file mode 100644 index 00000000..cfce7458 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QuerySaasRoleByIdentityListDTO.java @@ -0,0 +1,38 @@ +package cn.axzo.tyr.client.model.permission; + +import java.util.List; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Builder; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/28 13:56 + * @description : 通过工作台Id 单位Id 查询用户角色信息 + */ +@Data +@Builder +public class QuerySaasRoleByIdentityListDTO { + + /** + * 身份IdList + */ + private List identityIds; + + /** + * 身份类型 + */ + private IdentityType identityType; + + /** + * 工作台id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryUserRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryUserRoleReq.java new file mode 100644 index 00000000..7b36fbdf --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/QueryUserRoleReq.java @@ -0,0 +1,43 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/5/19 15:01 + * @description : 查询用户拥有得角色 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class QueryUserRoleReq { + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + + /** + * 身份Id列表 + */ + private List identityIds; + + private IdentityType identityType; + + private List roleTypes; + + private List roleIds; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RemoveTokenDto.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RemoveTokenDto.java new file mode 100644 index 00000000..86de3d9a --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RemoveTokenDto.java @@ -0,0 +1,26 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author liuyang + * 删除token + */ +@Data +public class RemoveTokenDto { + + /** + * 账号ID + */ + @NotNull(message = "账号ID不能为空") + private Integer acctId; + + /** + * 客户端ID + */ + @NotBlank(message = "客户端ID不能为空") + private String clientId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleBaseInfo.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleBaseInfo.java new file mode 100644 index 00000000..b5631fe3 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleBaseInfo.java @@ -0,0 +1,32 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/19 15:13 + * @description : 角色基本信息 + */ +@Data +public class RoleBaseInfo { + + /** + * id + */ + private Long id; + + /** + * 角色名称 + */ + private String name; + + /** + * 角色描述 + */ + private String description; + + /** + * 角色类型:common 普通角色 super_admin超级管理员 admin子管理员 init初始化内置角色 + */ + private String roleType; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleByIdentityIdAndWorkspaceIdReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleByIdentityIdAndWorkspaceIdReq.java new file mode 100644 index 00000000..15e74fa2 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleByIdentityIdAndWorkspaceIdReq.java @@ -0,0 +1,28 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/27 15:50 + * @description : + */ +@Data +public class RoleByIdentityIdAndWorkspaceIdReq { + + /** + * 身份id + */ + private Long identityId; + +// /** +// * 身份类型 +// */ +// private IdentityTypeEnum identityType; + + /** + * 工作台id + */ + private Long workspaceId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleResp.java new file mode 100644 index 00000000..2b1641f1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleResp.java @@ -0,0 +1,36 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author: cl + * @description: 班组长权限分类实体 + * @date: 2022-06-17 + **/ +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class RoleResp { + + /** + * 权限集分类名称 + */ + private String roleName; + + /** + * 授权的权限 + */ + @NotNull + private List groupPermissionList; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleTemplateResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleTemplateResp.java new file mode 100644 index 00000000..e71c26b1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/RoleTemplateResp.java @@ -0,0 +1,33 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/19 14:23 + * @description : 模板响应 + */ +@Data +public class RoleTemplateResp { + + /** + * Id + */ + private Long id; + + /** + * 模板名字 + */ + private String templateName; + + /** + * 1:总包企业级 2:总包项目级 3:政企级 4:分包企业级 5:班组级 + */ + private Integer type; + + /** + * 备注 + */ + private String remark; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureBO.java new file mode 100644 index 00000000..aa9ad7ac --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureBO.java @@ -0,0 +1,100 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class SaasFeatureBO { + + /** + * 适用单位类型 位 + */ + private Long fitOuTypeBit; + /** + * id + */ + private Long id; + /** + * 名称 + */ + private String featureName; + /** + * 描述 + */ + private String description; + /** + * code + */ + private String featureCode; + /** + * 图标地址 + */ + private String icon; + /** + * 菜单上级id + */ + private Long parentId; + /** + * 链接地址 + */ + private String linkUrl; + /** + * 1:CMS 2:小程序 4:原生 + */ + private Integer linkType; + /** + * 扩展字段 + */ + private String linkExt; + /** + * 小程序id 关联micro_app_item id + */ + private String microAppItemId; + /** + * 路径 + */ + private String path; + /** + * 排序 + */ + private Integer sort; + /** + * terminal + */ + private String terminal; + /** + * 类型 0.模块 1.菜单 2页面 3功能 + */ + private Integer featureType; + /** + * 是否需要权限 1.需要 2:不需要 + */ + private Integer needAuth; + /** + * 是否删除 + */ + private Long isDelete; + /** + * 创建人id + */ + private Long createBy; + /** + * 创建时间 + */ + private LocalDateTime createAt; + /** + * 更新时间 + */ + private LocalDateTime updateAt; + /** + * 修改人id + */ + private Long updateBy; + + private Long productId; + + private String productName; + + private String legacyLayout; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureDTO.java new file mode 100644 index 00000000..34a6f3f8 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureDTO.java @@ -0,0 +1,64 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +@Data +public class SaasFeatureDTO { + + private Long id; + /** + * 描述 + */ + private String description; + /** + * 名称 + */ + private String featureName; + /** + * code + */ + private String featureCode; + /** + * 图标地址 + */ + private String icon; + /** + * 菜单上级id + */ + private Long parentId; + /** + * 链接地址 + */ + private String linkUrl; + /** + * 1:CMS 2:小程序 4:原生 + */ + private Integer linkType; + /** + * 扩展字段 + */ + private String linkExt; + /** + * 小程序id 关联micro_app_item id + */ + private String microAppItemId; + /** + * 排序 + */ + private Integer sort; + /** + * 菜单适用于平台 0:企业工作台 1:项目工作台 + */ + private Integer perspectiveTerminal; + /** + * 类型 0.模块 1.菜单 2页面 3功能 + */ + private Integer featureType; + /** + * 是否需要权限 1.需要 2:不需要 + */ + private Integer needAuth; + + private Long productId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureSearchDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureSearchDTO.java new file mode 100644 index 00000000..d9ba702e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureSearchDTO.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.page.PageRequest; +import lombok.Data; + +@Data +public class SaasFeatureSearchDTO extends PageRequest { + + /** + * 权限名称/权限code + */ + private String key; + + /** + * 权限集名称 + */ + private String groupName; + + /** + * 目标平台 + */ + private String perspectiveTerminal; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureTreeResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureTreeResp.java new file mode 100644 index 00000000..0b1782fa --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasFeatureTreeResp.java @@ -0,0 +1,179 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.model.IBaseTree; +import cn.axzo.tyr.client.model.enums.FeatureTypeEnum; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @author : liuchuntao + * @date : 2022/5/16 10:31 + * @description : saas 资源树 + */ +@Data +public class SaasFeatureTreeResp implements IBaseTree { + + /** + * 元素 Id + */ + private Long id; + + /** + * 父级 Id + */ + private Long parentId; + + /** + * 0.模块 1.菜单 2页面 3功能 99:端-不可编辑 + */ + private Integer menuType; + + /** + * 元素名称 + */ + private String name; + /** + * code + */ + private String code; + + /** + * 图标名 + */ + private String icon; + /** + * 路由地址 + */ + private String linkUrl; + /** + * 1:安心筑企业 2:小程序 4:原生 如果菜单同时又对应app上展示 则填写对应linkUrl 和linkExt + */ + private Integer linkType; + /** + * 扩展字段 原生使用 + */ + private String linkExt; + + /** + * 排序号 + */ + private Integer sort; + + + /** + * 小程序id 关联micro_app_item id + */ + private String microAppItemId; + + /** + * 菜单适用于平台 NT_CMS_WEB_ENT_ZB:企业工作台 NT_CMS_WEB_PROJ:项目工作台 + * NT_CMP_APP_ENT_ZB:从业人员企业端 NT_CMP_APP_PROJ:从业人员项目端 + * NT_CM_APP_CM_LEADER:班组长侧 NT_CM_APP_WORKER:工人侧 + * NT_OMS_WEB OMS,运营管理后台 NT_SM:数据大屏 + * NT_SCREEN 数据大屏 + * */ + private String terminal; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createAt; + + /** + * 更新时间 + */ + private Date updateAt; + + /** + * 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 + */ + private List fitOuTypes; + + /** + * 1:部门 2:班组 4:小组 + */ + private List fitOuNodeTypes; + + /** + * 适配老接口 应用所属 system:系统应用 personal:个人应用 business:业务应用 只会挂在第一级别 + */ + private String legacyLayout; + + + /** + * 网关专属字段,所属应用 + */ + private String appName; + /** + * 网关专属字段,是否授权 0:无需要授权 1:需要授权 + */ + private Integer needAuth; + + /** + * 网关专属字段,是否认证 0:无需要认证 1:需要认证 + */ + private Integer needCert; + + /** + * 网关专属字段 ,功能URL,对应后端接口url + */ + private String featureUrl; + + + /** + * 当前所有子级里面是否有功能code + */ + @JsonIgnore + public boolean isHadFeatureFunction() { + if (!Objects.equals(menuType, FeatureTypeEnum.FEATURE.getCode())) { + if (CollectionUtils.isEmpty(children)) { + return false; + } + return children.stream().anyMatch(SaasFeatureTreeResp::isHadFeatureFunction); + } + return true; + } + + /** + * 子集 + */ + private List children; + + + @Override + @JsonIgnore + public String getNodeCode() { + return businessNo; + } + + @Override + @JsonIgnore + public String getParentNodeCode() { + return parentBusinessNo; + } + + @Override + @JsonIgnore + public List getNodeChildren() { + return children; + } + + @Override + public void setNodeChildren(List nodeChildren) { + this.children = nodeChildren; + } + + private String businessNo; + + private String parentBusinessNo; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasHierarchyFeatureBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasHierarchyFeatureBO.java new file mode 100644 index 00000000..2c7aab7d --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasHierarchyFeatureBO.java @@ -0,0 +1,103 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class SaasHierarchyFeatureBO { + + /** + * 适用单位类型 位 + */ + private Long fitOuTypeBit; + /** + * id + */ + private Long id; + /** + * 名称 + */ + private String featureName; + /** + * 描述 + */ + private String description; + /** + * code + */ + private String featureCode; + /** + * 图标地址 + */ + private String icon; + /** + * 菜单上级id + */ + private Long parentId; + /** + * 链接地址 + */ + private String linkUrl; + /** + * 1:CMS 2:小程序 4:原生 + */ + private Integer linkType; + /** + * 扩展字段 + */ + private String linkExt; + /** + * 小程序id 关联micro_app_item id + */ + private String microAppItemId; + /** + * 路径 + */ + private String path; + /** + * 排序 + */ + private Integer sort; + /** + * terminal + */ + private String terminal; + /** + * 类型 0.模块 1.菜单 2页面 3功能 + */ + private Integer featureType; + /** + * 是否需要权限 1.需要 2:不需要 + */ + private Integer needAuth; + /** + * 是否删除 + */ + private Long isDelete; + /** + * 创建人id + */ + private Long createBy; + /** + * 创建时间 + */ + private LocalDateTime createAt; + /** + * 更新时间 + */ + private LocalDateTime updateAt; + /** + * 修改人id + */ + private Long updateBy; + + private Long productId; + + private String productName; + + private String legacyLayout; + + private List child; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPermissionGroupBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPermissionGroupBO.java new file mode 100644 index 00000000..497484a1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPermissionGroupBO.java @@ -0,0 +1,75 @@ +package cn.axzo.tyr.client.model.permission; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * TODO: 这里的字段和Model的字段对不上 + * + * @author gaowei + * + */ +@Data +public class SaasPermissionGroupBO extends Model { + + private Long id; + /** + * 产品Id + */ + private Long productId; + /** + * 权限集名称 + */ + private String name; + /** + * 权限集描述 + */ + private String description; + /** + * 适用单位类型 1总包 2分包 3分包总包 + */ + private Integer ouType; + /** + * 权限集类型 1查看 2操作管理 + */ + private Integer type; + /** + * 是否删除:0否,other是 + */ + private Long isDelete; + /** + * 创建时间 + */ + private LocalDateTime createAt; + /** + * 更新时间 + */ + private LocalDateTime updateAt; + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; + /** + * 是否自定义 0:不是 1:是 如果为1 custom_space_id 不能为空 + */ + private Integer isCustom; + /** + * 工作台Id + */ + private Long customSpaceId; + + /** + * 功能IDs + */ + private List featureIds; + + +} + diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPermissionGroupInPositionTemplate.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPermissionGroupInPositionTemplate.java new file mode 100644 index 00000000..749edbe3 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPermissionGroupInPositionTemplate.java @@ -0,0 +1,33 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SaasPermissionGroupInPositionTemplate { + + /** + * 分类名称,对应角色分组名称 + */ + private String categoryName; + /** + * 分类编码,对应角色分组code + */ + private String categoryCode; + + /** + * 权限集id + */ + private Long permissionGroupId; + + /** + * 权限集名称,对应角色名称 + */ + private String permissionGroupName; + +} \ No newline at end of file diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPositionTemplateExBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPositionTemplateExBO.java new file mode 100644 index 00000000..a9a14c36 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPositionTemplateExBO.java @@ -0,0 +1,45 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SaasPositionTemplateExBO { + + /** + * id + */ + private Long id; + + /** + * 职位名,对应角色分组名 + */ + private String name; + + /** + * 编码,对应角色分组code + */ + private String code; + + /** + * 描述 + */ + private String description; + + /** + * 职位类型:1:平台级别类型,2:workspace级别类型,对应角色分组工作台类型 + */ + private Integer type; + + private List permissionGroups; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPositionTemplateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPositionTemplateReq.java new file mode 100644 index 00000000..c0e889b9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasPositionTemplateReq.java @@ -0,0 +1,26 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SaasPositionTemplateReq { + + /** + * 可以为空,为空就是忽略此条件 + */ + private List positionTemplateIdList; + + /** + * 可以为空,为空就是忽略此条件 + */ + private List positionCodeList; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleAndIdentityBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleAndIdentityBO.java new file mode 100644 index 00000000..f4928bc3 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleAndIdentityBO.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +/** + * saas-角色(SaasRole)表实体类 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class SaasRoleAndIdentityBO extends SaasRoleBO { + + private Long identityId; + + private IdentityType identityType; + + private int jobType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleBO.java new file mode 100644 index 00000000..bb1b78e2 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleBO.java @@ -0,0 +1,62 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +/** + * saas-角色(SaasRole)表实体类 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class SaasRoleBO { + + private Long roleId; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + */ + private RoleTypeEnum roleType; + + /** + * 角色描述 + */ + private String description; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 0:企业工作台 1:项目工作台 + */ + private Integer workspaceType; + + /** + * 角色所属单位Id 可能是总包,也可能是分包 + */ + private Long ownerOuId; + + /** + * 岗位编码 + */ + private String jobCode; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleCreateOrUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleCreateOrUpdateReq.java new file mode 100644 index 00000000..67587512 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleCreateOrUpdateReq.java @@ -0,0 +1,95 @@ +package cn.axzo.tyr.client.model.permission; + +import java.util.ArrayList; +import java.util.List; + +import javax.validation.constraints.NotBlank; + +import cn.axzo.basics.common.constant.enums.OrganizationalNodeTypeEnum; +import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum; +import cn.axzo.tyr.client.common.SaasRoleFits; +import cn.axzo.tyr.client.model.enums.WorkspaceTypeWithLegacyEnum; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class SaasRoleCreateOrUpdateReq { + + private Long id; + + @NotBlank(message = "名字不能为空") + private String name; + + private String description; + + private String roleType; + + /** + * 表示这个Role可以使用哪些权限集里的权限 + */ + private List permissionGroupIds = new ArrayList<>(); + + private WorkspaceTypeWithLegacyEnum workspaceType; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 角色owner单位Id 实际角色和用户的所属关系 具体查询relation的ouId + */ + private Long ownerOuId; + + /** + * 适用单位类型 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 0都可以用 只会挂在最末级 + */ + private Long fitOuTypeBit; + + /** + * 适用节点类型 1:部门 2:班组 4:小组 只会挂在最末级 + */ + private Long fitOuNodeTypeBit; + + public List getFitOuTypeEnumList() { + return SaasRoleFits.splitToFitOuTypeEnums(this.fitOuTypeBit); + } + + public List getFitOuNodeTypeEnumList() { + return SaasRoleFits.splitToFitOuNodeTypeEnums(this.fitOuNodeTypeBit); + } + + public List getFitOuTypeValueList() { + return SaasRoleFits.splitToFitOuTypeValues(this.fitOuTypeBit); + } + + public List getFitOuNodeTypeValueList() { + return SaasRoleFits.splitToFitOuNodeTypeValues(this.fitOuNodeTypeBit); + } + + public void setFitOuTypeByValues(List fitOuTypeList) { + this.fitOuTypeBit = SaasRoleFits.concatFitOuTypeByValues(fitOuTypeList); + } + + public void setFitOuNodeTypeByValues(List fitOuNodeTypeList) { + this.fitOuNodeTypeBit = SaasRoleFits.concatFitOuNodeTypeByValues(fitOuNodeTypeList); + } + + public void setFitOuTypeByEnums(List fitOuTypeList) { + this.fitOuTypeBit = SaasRoleFits.concatFitOuTypeByList(fitOuTypeList); + } + + public void setFitOuNodeTypeByEnums(List fitOuNodeTypeList) { + this.fitOuNodeTypeBit = SaasRoleFits.concatFitOuNodeTypeByList(fitOuNodeTypeList); + } + + public boolean isFitOuType(Integer ouType) { + return SaasRoleFits.isFitOuType(this.fitOuTypeBit, ouType); + } + + public boolean isFitOuNodeType(Integer ouNodeType) { + return SaasRoleFits.isFitOuNodeType(this.fitOuNodeTypeBit, ouNodeType); + } + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDTO.java new file mode 100644 index 00000000..b8793ac2 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDTO.java @@ -0,0 +1,70 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import java.util.ArrayList; +import java.util.List; + +/** + * @author: wangli + * @date: 2022/5/26 14:18 + */ +@Data +@Accessors(chain = true) +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SaasRoleDTO { + + private Long id; + + /** + * 角色名称 + */ + @NotBlank(message = "名字不能为空") + private String name; + + /** + * 角色描述 + */ + private String description; + + /** + * 权限集 + */ + private List groupIds = new ArrayList<>(); + + /** + * 工作台ID + */ + private Long workspaceId; + /** + * 工作台类型 + */ + private Integer workspaceType; + + /** + * 所属单位ID + */ + private Long ownerOuId; + + /** + * 角色类型 + */ + private String roleType; + + /** + * 是否删除 + */ + private Long isDelete; + + /** + * 职位模板I + */ + private Long positionTemplateId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDelDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDelDTO.java new file mode 100644 index 00000000..3b4eb6af --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDelDTO.java @@ -0,0 +1,35 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Builder; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/30 16:00 + * @description : 删除指定工作台角色-用户关联关系 + */ +@Data +@Builder +public class SaasRoleDelDTO { + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 + */ + private IdentityType identityType; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDetailResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDetailResp.java new file mode 100644 index 00000000..6e1e26ab --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleDetailResp.java @@ -0,0 +1,41 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/6/30 14:46 + * @description : + */ +@Data +public class SaasRoleDetailResp extends SaasRoleResp{ + + /** + * 权限集Id + */ + private List groupIds; + + /** + * 权限集名称 + */ + private List groupNames; + + + /** + * 权限集Id + */ + private int groupCounts; + + /** + * 岗位成员 + */ + private List mainUsers; + + /** + * 协助岗位成员 + */ + private List salveUsers; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleExBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleExBO.java new file mode 100644 index 00000000..77632dec --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleExBO.java @@ -0,0 +1,61 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +/** + * saas-角色(SaasRole)表实体类 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class SaasRoleExBO { + + private Long roleId; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + */ + private RoleTypeEnum roleType; + + /** + * 角色描述 + */ + private String description; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 0:企业工作台 1:项目工作台 + */ + private Integer workspaceType; + + /** + * 角色所属单位Id 可能是总包,也可能是分包 + */ + private Long ownerOuId; + + private List permissionGroupList; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleExReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleExReq.java new file mode 100644 index 00000000..4e004bb6 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleExReq.java @@ -0,0 +1,21 @@ +package cn.axzo.tyr.client.model.permission; + +import java.util.List; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SaasRoleExReq { + private List roleIds; + + private Long workspaceId; + + private Long ownerOuId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleInfoResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleInfoResp.java new file mode 100644 index 00000000..520bc5eb --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleInfoResp.java @@ -0,0 +1,25 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/6/21 15:38 + * @description : 角色及信息 + */ +@Data +public class SaasRoleInfoResp { + + /** + * 身份Id + */ + private Long identityId; + + /** + * 角色列表 + */ + private List roleBOList; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleJobInfoResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleJobInfoResp.java new file mode 100644 index 00000000..b82b1045 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleJobInfoResp.java @@ -0,0 +1,22 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import java.util.List; + +/** + * @author hewei@axzo.cn + * @date 2022/10/10 17:20 + */ +@Data +public class SaasRoleJobInfoResp { + + /** + * 身份Id + */ + private Long identityId; + /** + * 岗位列表 + */ + private List roleJobBOList; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleOuBatchDelDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleOuBatchDelDTO.java new file mode 100644 index 00000000..48cf9507 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleOuBatchDelDTO.java @@ -0,0 +1,36 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author : cl + * @date : 2022/06/21 + * @description : 批量删除指定用户角色 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SaasRoleOuBatchDelDTO { + + /** + * 单位Id + */ + private Long ouId; + + /** + * 身份Id + */ + private List identityIdList; + + /** + * 身份类型 + */ + private IdentityType identityType; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleQueryDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleQueryDTO.java new file mode 100644 index 00000000..24e56541 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleQueryDTO.java @@ -0,0 +1,48 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author : liuchuntao + * @date : 2022/5/30 14:35 + * @description : + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SaasRoleQueryDTO { + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 + */ + private IdentityType identityType; + + /** + * 查询关键字 + */ + private String keyWords; + + private RoleTypeEnum roleType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleResp.java new file mode 100644 index 00000000..dc73b8df --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasRoleResp.java @@ -0,0 +1,34 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/6/8 16:53 + * @description : 角色列表 + */ +@Data +public class SaasRoleResp { + + /** + * 主键 + */ + private Long id; + /** + * 角色名称 + */ + private String name; + /** + * 角色描述 + */ + private String description; + /** + * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + */ + private String roleType; + /** + * + * 岗位编码 + */ + private String jobCode; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserPermissionBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserPermissionBO.java new file mode 100644 index 00000000..c7cef76c --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserPermissionBO.java @@ -0,0 +1,103 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.constant.enums.OrganizationalNodeTypeEnum; +import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum; +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.tyr.client.common.SaasRoleFits; +import lombok.Data; + +import java.util.List; + +/** + * 首先可以用来表达一个用户有哪些Code。 + * 字段全一些,可以为以后的功能打一些基础。 + * + * @author gaowei + * + */ +@Data +public class SaasUserPermissionBO { + + /** + * 这个字段来自SaasRoleUserRelation + */ + private Long identityId; + + /** + * 这个字段来自SaasRoleUserRelation + */ + private IdentityType identityType; + + /** + * 这个字段来自SaasRoleUserRelation + */ + private Long workspaceId; + + /** + * 这个字段来自SaasRoleUserRelation + */ + private Long ouId; + + /** + * code,这个字段来自SaasFeature + */ + private String featureCode; + + /** + * 名称,这个字段来自SaasFeature + */ + private String featureName; + + /** + * 这个字段来自SaasFeature + */ + private Long fitOuTypeBit; + + /** + * 这个字段来自SaasFeature + */ + private Long fitOuNodeTypeBit; + + + public List getFitOuTypeEnumList() { + return SaasRoleFits.splitToFitOuTypeEnums(this.fitOuTypeBit); + } + + public List getFitOuNodeTypeEnumList() { + return SaasRoleFits.splitToFitOuNodeTypeEnums(this.fitOuNodeTypeBit); + } + + public List getFitOuTypeValueList() { + return SaasRoleFits.splitToFitOuTypeValues(this.fitOuTypeBit); + } + + public List getFitOuNodeTypeValueList() { + return SaasRoleFits.splitToFitOuNodeTypeValues(this.fitOuNodeTypeBit); + } + + public void setFitOuTypeByValues(List fitOuTypeList) { + this.fitOuTypeBit = SaasRoleFits.concatFitOuTypeByValues(fitOuTypeList); + } + + public void setFitOuNodeTypeByValues(List fitOuNodeTypeList) { + this.fitOuNodeTypeBit = SaasRoleFits.concatFitOuNodeTypeByValues(fitOuNodeTypeList); + } + + public void setFitOuTypeByEnums(List fitOuTypeList) { + this.fitOuTypeBit = SaasRoleFits.concatFitOuTypeByList(fitOuTypeList); + } + + public void setFitOuNodeTypeByEnums(List fitOuNodeTypeList) { + this.fitOuNodeTypeBit = SaasRoleFits.concatFitOuNodeTypeByList(fitOuNodeTypeList); + } + + public boolean isFitOuType(Integer ouType) { + return SaasRoleFits.isFitOuType(this.fitOuTypeBit, ouType); + } + + public boolean isFitOuNodeType(Integer ouNodeType) { + return SaasRoleFits.isFitOuNodeType(this.fitOuNodeTypeBit, ouNodeType); + } + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserPermissionReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserPermissionReq.java new file mode 100644 index 00000000..223deaef --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserPermissionReq.java @@ -0,0 +1,31 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SaasUserPermissionReq { + + private List identityIds; + + private IdentityType identityType; + + private List productIds; + + private Long workspaceId; + + private Long ouId; + + private List codes; + + private String featureNameLike; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserWithEntProjectBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserWithEntProjectBO.java new file mode 100644 index 00000000..ad1a2249 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SaasUserWithEntProjectBO.java @@ -0,0 +1,34 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Set; + +/** + * 从业人员拥有权限的项目 企业 + * + * @author jiachao + * @date 2021/8/25 + */ +@Data +@Accessors(chain = true) +public class SaasUserWithEntProjectBO { + + /** + * 从业userid + */ + private Long entUserId; + + /** + * 项目id list + */ + private Set projectIds; + + /** + * 企业id list + */ + private Set entIds; +} + + diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SuperAminInfoResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SuperAminInfoResp.java new file mode 100644 index 00000000..0c90bcd9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/SuperAminInfoResp.java @@ -0,0 +1,42 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/6/17 16:20 + * @description : 超管信息 + */ +@Data +public class SuperAminInfoResp { + + /** + * 身份ID + */ + private Long identityId; + + private IdentityType identityType; + + /** + * 手机号 + */ + private String phone; + + /** + * 姓名 + */ + private String realName; + + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UpdatePermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UpdatePermissionGroupReq.java new file mode 100644 index 00000000..018046fa --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UpdatePermissionGroupReq.java @@ -0,0 +1,38 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + */ +@Data +public class UpdatePermissionGroupReq extends CommonWorkspaceIdAndOuIdReq { + + /** + * 主键id + */ + @NotNull + @Min(value = 1) + private Long id; + /** + * 权限集名称 + */ + @NotBlank(message = "权限集名称不能为空") + @Length(max = 20, message = "权限集名称不能超过20个字符") + private String name; + /** + * 权限集描述 + */ + private String description; + /** + * 功能集合id + */ + @NotEmpty(message = "权限集不能为空") + private List featureIds; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UpdateWorkspaceSupAdminDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UpdateWorkspaceSupAdminDTO.java new file mode 100644 index 00000000..de6083fa --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UpdateWorkspaceSupAdminDTO.java @@ -0,0 +1,46 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Builder; +import lombok.Data; + + +/** + * @author : liuchuntao + * @date : 2022/5/30 16:24 + * @description : 更新工作台超管 + */ +@Builder +@Data +public class UpdateWorkspaceSupAdminDTO { + + /** + * 身份类型 + */ + private IdentityType identityType; + + /** + * 身份id + */ + private Long identityId; + + /** + * 工作台id + */ + private Long workspaceId; + + /** + * 组织单位id + */ + private Long organizationalUnitId; + + /** + * 工作台类型 + */ + private Integer workspaceType; + + + private Long naturalPersonId; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UserInfoDto.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UserInfoDto.java new file mode 100644 index 00000000..3d8d9f4f --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UserInfoDto.java @@ -0,0 +1,32 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.trade.datasecurity.sd.extension.annotation.SDCellPhoneField; +import lombok.Data; + +/** + * @author hewei@axzo.cn + * @date 2022/10/11 10:52 + */ +@Data +public class UserInfoDto { + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 + */ + private IdentityType identityType; + /** + * 姓名 + */ + private String name; + /** + * 手机号码 + */ + @SDCellPhoneField + private String phone; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UserRoleRelationApiDto.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UserRoleRelationApiDto.java new file mode 100644 index 00000000..6cd887fb --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/UserRoleRelationApiDto.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.constant.ConstStringPool; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * @author cn + * @version 1.0 + * @description + * @date 2022/8/13 14:12 + */ +@Getter +@Setter +@ToString +public class UserRoleRelationApiDto { + + private long ouId = 0L; + private long workspaceId = 0L; + private long identityId = 0L; + + @JsonIgnore + public String getUniquenessKey() { + return ouId + ConstStringPool.REDIS_SPLIT_STRING + workspaceId + + ConstStringPool.REDIS_SPLIT_STRING + identityId; + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceAndOuFeatureBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceAndOuFeatureBO.java new file mode 100644 index 00000000..cdce386d --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceAndOuFeatureBO.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class WorkspaceAndOuFeatureBO { + + /** + * 工作台id + */ + private Long workspaceId; + + /** + * 单位id + */ + private Long ouId; + + /** + * 菜单id + */ + private Long featureId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceAndOuFeatureIdBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceAndOuFeatureIdBO.java new file mode 100644 index 00000000..379d605c --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceAndOuFeatureIdBO.java @@ -0,0 +1,23 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +@Data +public class WorkspaceAndOuFeatureIdBO { + + /** + * 工作台id + */ + private Long workspaceId; + + /** + * 单位id + */ + private Long ouId; + + /** + * 菜单path + */ + private Long featureId; + +} \ No newline at end of file diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceChangerAdminReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceChangerAdminReq.java new file mode 100644 index 00000000..6e1c8dba --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceChangerAdminReq.java @@ -0,0 +1,23 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author : liuchuntao + * @date : 2022/5/10 16:20 + * @description : 工作台变更超管请求 + */ +@Data +public class WorkspaceChangerAdminReq { + + @NotNull(message = "原账户Id不能为空") + private Long oldAccountId; + + @NotNull(message = "新账户Id不能为空") + private Long newAccountId; + + @NotNull(message = "工作台Id不能为空") + private Long workspaceId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateAdminReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateAdminReq.java new file mode 100644 index 00000000..58965e41 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateAdminReq.java @@ -0,0 +1,27 @@ +package cn.axzo.tyr.client.model.permission; + +import java.util.List; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author : liuchuntao + * @date : 2022/5/10 16:20 + * @description : 工作台创建请求 + */ +@Data +public class WorkspaceCreateAdminReq { + + @NotNull(message = "账户Id不能为空") + private Long accountId; + + @NotNull(message = "工作台Id不能为空") + private Long workspaceId; + + @NotNull(message = "工作台类型不能为空") + private Integer workspaceType; + + @NotEmpty(message = "saas产品Id不能为空") + private List saasProductId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateOrUpdateAdminReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateOrUpdateAdminReq.java new file mode 100644 index 00000000..457b2ef9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateOrUpdateAdminReq.java @@ -0,0 +1,38 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/5/18 17:00 + * @description : + */ +@Data +public class WorkspaceCreateOrUpdateAdminReq { + + @NotNull(message = "手机号") + private String phoneNo; + + @NotNull(message = "用户名") + private String userName; + + @NotNull(message = "工作台Id不能为空") + private Long workspaceId; + + @NotNull(message = "单位Id不能为空") + private Long organizationalUnitId; + + @NotNull(message = "工作台类型不能为空 1.总包企业级 ,2.总包项目级 ,3.政企级,4.分包企业级,5.班组级") + private Integer workspaceType; + + @NotEmpty(message = "当前工作台对应的产品Id集合") + private List currentProductIds; + /** + * 原产品IdList 初次创建可以不填 + */ + private List oldProductIds; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateOrUpdateAdminResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateOrUpdateAdminResp.java new file mode 100644 index 00000000..c3347c24 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceCreateOrUpdateAdminResp.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +@Data +public class WorkspaceCreateOrUpdateAdminResp { + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 1 - 工人, 2 - 班组长, 3 - 从业人员, 4 - 政务人员 + */ + private Integer identityType; + + /** + * 账户Id + */ + private Long accountId; + + /** + * 自然人Id + */ + private Long personId; + + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceGrantAdminRoleByPhoneReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceGrantAdminRoleByPhoneReq.java new file mode 100644 index 00000000..2aaa3577 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceGrantAdminRoleByPhoneReq.java @@ -0,0 +1,51 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class WorkspaceGrantAdminRoleByPhoneReq { + + /** + * 工作台id,与context校验 + */ + @NotNull(message = "workspaceId不能为空") + private Long workspaceId; + + /** + * 单位id + */ + @NotNull(message = "ouId不能为空") + private Long ouId; + + /** + * 手机号 + */ + @NotBlank(message = "phone不能为空") + private String phone; + + /** + * 昵称 + */ + private String nickName; + + /** + * 角色Id,必填 + * 只能传SUPER_ADMIN,ADMIN + */ + private RoleTypeEnum roleType; + + /** + * 身份类型 + */ + @NotNull(message = "identityType不能为空") + private IdentityType identityType; + + @NotNull(message = "workspaceType不能为空") + private Integer workspaceType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceGrantAdminRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceGrantAdminRoleReq.java new file mode 100644 index 00000000..f21ad330 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceGrantAdminRoleReq.java @@ -0,0 +1,48 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.common.constant.enums.OrganizationalNodeTypeEnum; +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; +import cn.axzo.tyr.client.model.enums.WorkspaceTypeWithLegacyEnum; +import lombok.Data; + +@Data +public class WorkspaceGrantAdminRoleReq { + + /** + * 工作台id,与context校验 + */ + private Long workspaceId; + + /** + * 工作台类型 + */ + private WorkspaceTypeWithLegacyEnum workspaceType; + + /** + * 单位id : 非必填 + */ + private Long ouId; + + /** + * 单位类型 + */ + private OrganizationalNodeTypeEnum nodeTypeEnum; + + /** + * 被赋予角色的人的身份id + */ + private Long identityId; + + /** + * 身份类型,必填 + */ + private IdentityType identityType; + + /** + * 角色Id,必填 + * 只能传SUPER_ADMIN,ADMIN + */ + private RoleTypeEnum roleType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceTemplateInitReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceTemplateInitReq.java new file mode 100644 index 00000000..162a7b29 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceTemplateInitReq.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +public class WorkspaceTemplateInitReq { + + @NotNull(message = "工作台Id不能为空") + private Long workspaceId; + + @NotNull(message = "单位Id不能为空") + private Long organizationalUnitId; + + @NotNull(message = "工作台类型不能为空 1.总包企业级 ,2.总包项目级 ,3.政企级,4.分包企业级,5.班组级") + private Integer workspaceType; + + @NotEmpty(message = "当前工作台对应的产品Id集合") + private Long newTemplateId; + + /** + * 原产品IdList 初次创建可以不填 + */ + private Long oldTemplateId; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceUpdateUserRoleDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceUpdateUserRoleDTO.java new file mode 100644 index 00000000..202130ec --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceUpdateUserRoleDTO.java @@ -0,0 +1,46 @@ +package cn.axzo.tyr.client.model.permission; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.tyr.client.model.enums.SaasJobTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class WorkspaceUpdateUserRoleDTO { + + /** + * 工作台id,与context校验 + */ + private Long workspaceId; + + /** + * 单位id : 必填 + */ + private Long ouId; + + /** + * 被赋予角色的人的身份id + */ + private Long identityId; + + /** + * 被赋予角色的人的身份类型 + */ + private IdentityType identityType; + + /** + * 完整的update,之前的所有RoleId都被更新 + */ + private List updateRoleIds; + + + private SaasJobTypeEnum jobType = SaasJobTypeEnum.SLAVE_JOB; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceWorkTeamRoleResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceWorkTeamRoleResp.java new file mode 100644 index 00000000..d9b30720 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/WorkspaceWorkTeamRoleResp.java @@ -0,0 +1,40 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +/** + * @author: cl + * @description: 项目外成员管理角色权限 + * @date: 2022-06-17 + **/ + +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class WorkspaceWorkTeamRoleResp { + + /** + * 工作空间ID + */ + private Long workspaceId; + + /** + * 资源Id + */ + private Long resourceId; + + /** + * 资源类型 + */ + private Integer resourceType; + + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasAuthApiImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasAuthApiImpl.java new file mode 100644 index 00000000..a69dddf2 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasAuthApiImpl.java @@ -0,0 +1,88 @@ +package cn.axzo.tyr.server.controller.permission; + +import cn.axzo.basics.common.BeanMapper; +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.basics.profiles.dto.basic.IdentityProfileDto; +import cn.axzo.tyr.client.feign.SaasAuthApi; +import cn.axzo.tyr.client.model.permission.IdentityAndAccountDTO; +import cn.axzo.tyr.client.model.permission.IdentityAndAccountResp; +import cn.axzo.tyr.client.model.permission.IdentityKey; +import cn.axzo.tyr.client.model.permission.QueryIdentityByPermissionDTO; +import cn.axzo.tyr.client.model.permission.QueryIdentityByPermissionReq; +import cn.axzo.tyr.server.service.SaasRoleUserRelationService; +import cn.azxo.framework.common.model.CommonResponse; +import cn.hutool.core.collection.CollectionUtil; +import com.google.common.collect.Lists; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequiredArgsConstructor +public class SaasAuthApiImpl implements SaasAuthApi { + + private final SaasRoleUserRelationService relationService; +// private final IdentityProfileService identityProfileService; + + private static final String SPLIT = "|"; + + @Override + public CommonResponse> findIdentityKeysByParams(QueryIdentityByPermissionReq req) { + + IdentityProfileDto superAdmin = getSuperAdmin(req.getIdentityId(), req.getIdentityType(), req.getWorkspaceId(), req.getOuId()); + if (superAdmin != null) { + IdentityKey identityKey = new IdentityKey(); + identityKey.setIdentityId(superAdmin.getId()); + identityKey.setIdentityType(superAdmin.getIdentityType()); + return CommonResponse.success(Lists.newArrayList(identityKey)); + } + + QueryIdentityByPermissionDTO dto = BeanMapper.copyBean(req, QueryIdentityByPermissionDTO.class); + List accountResps = relationService.findIdentityAndAccountInfosByParams(dto); + if (CollectionUtil.isEmpty(accountResps)) { + return CommonResponse.success(new ArrayList<>()); + } + return CommonResponse.success(accountResps.stream().map(k -> new IdentityKey(k.getIdentityId(), k.getIdentityType())).distinct() + .collect(Collectors.toList())); + + } + + private IdentityProfileDto getSuperAdmin(Long identityId, IdentityType identityType, Long workspaceId, Long ouId) { + IdentityProfileDto saasAccount = null; + boolean superAdmin = relationService.isSuperAdmin(identityId, identityType, workspaceId, ouId); +// if (superAdmin) { +// Optional identityProfile = identityProfileService.findIdentityProfile(identityId, identityType); +// if (!identityProfile.isPresent()) { +// AssertUtil.fail("未找到自然人信息"); +// } +// saasAccount = identityProfile.get(); +// } + return saasAccount; + } + + @Override + public CommonResponse> findIdentityAndAccountInfosByParams(QueryIdentityByPermissionReq req) { + IdentityProfileDto superAdmin = getSuperAdmin(req.getIdentityId(), req.getIdentityType(), req.getWorkspaceId(), req.getOuId()); + if (superAdmin != null) { + IdentityAndAccountResp identityAndAccountResp = new IdentityAndAccountResp(); + identityAndAccountResp.setIdentityId(superAdmin.getId()); + identityAndAccountResp.setIdentityType(superAdmin.getIdentityType()); + identityAndAccountResp.setAccountId(0L); + identityAndAccountResp.setPhone(superAdmin.getPersonProfile().getPhone()); + identityAndAccountResp.setRealName(superAdmin.getPersonProfile().getRealName()); + identityAndAccountResp.setNaturalPersonId(superAdmin.getPersonProfile().getId()); + return CommonResponse.success(Lists.newArrayList(identityAndAccountResp)); + } + QueryIdentityByPermissionDTO dto = BeanMapper.copyBean(req, QueryIdentityByPermissionDTO.class); + List accountResps = relationService.findIdentityAndAccountInfosByParams(dto); + if (CollectionUtil.isEmpty(accountResps)) { + return CommonResponse.success(Collections.emptyList()); + } + return CommonResponse.success(BeanMapper.copyList(accountResps, IdentityAndAccountResp.class)); + + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasFeatureApiImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasFeatureApiImpl.java new file mode 100644 index 00000000..2e6f54a4 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasFeatureApiImpl.java @@ -0,0 +1,83 @@ +package cn.axzo.tyr.server.controller.permission; + +import cn.axzo.tyr.client.feign.SaasFeatureApi; +import cn.axzo.tyr.client.model.permission.ApplicationFeatureRes; +import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; +import cn.axzo.tyr.server.repository.entity.SaasFeature; +import cn.azxo.framework.common.model.CommonResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author cn + * @version 1.0 + * @description + * @date 11/23/2022 11:14 AM + */ +@RestController +@RequiredArgsConstructor +public class SaasFeatureApiImpl implements SaasFeatureApi { + + // 小程序 + private static final Integer LINK_TYPE_UNIAPP = 2; + // 原生 + private static final Integer LINK_TYPE_NATIVE = 4; + + @Resource + private SaasFeatureDao saasFeatureDao; + + @Override + public CommonResponse> getAppApplicationFeature(List terminals) { + List saasFeatures = saasFeatureDao.lambdaQuery() + .in(SaasFeature::getLinkType, Arrays.asList(LINK_TYPE_UNIAPP, LINK_TYPE_NATIVE)) + .in(!CollectionUtils.isEmpty(terminals), SaasFeature::getTerminal, terminals) + .eq(SaasFeature::getIsDelete, 0) + .list(); + if(CollectionUtils.isEmpty(saasFeatures)){ + return CommonResponse.success(); + } + + // 所有父节点 + List parentFeatureIds = saasFeatures.stream().map(SaasFeature::getParentId).distinct().collect(Collectors.toList()); + + List parentSaasFeatures = new ArrayList<>(); + + if(!CollectionUtils.isEmpty(parentFeatureIds)){ + // 小程序的父节点为顶级节点(顶级节点的父节点值为 0) + parentSaasFeatures = saasFeatureDao.lambdaQuery() + .in(SaasFeature::getId, parentFeatureIds) + .eq(SaasFeature::getIsDelete, 0) + .eq(SaasFeature::getParentId, 0) + .list(); + } + // 父节点属性 + Map parentFeatureIdAndNameMap = parentSaasFeatures.stream().collect(Collectors.toMap(SaasFeature::getId, SaasFeature::getFeatureName)); + + return CommonResponse.success(saasFeatures.stream() + .filter(data -> parentFeatureIdAndNameMap.containsKey(data.getParentId())) + .map(data -> { + Long parentId = data.getParentId(); + return ApplicationFeatureRes.builder() + .featureId(data.getId()) + .featureName(data.getFeatureName()) + .parentFeatureId(parentId) + .parentFeatureName(parentFeatureIdAndNameMap.get(parentId)) + .icon(data.getIcon()) + .linkType(data.getLinkType()) + .microAppItemId(data.getMicroAppItemId()) + .linkUrl(data.getLinkUrl()) + .linkExt(data.getLinkExt()) + .terminal(data.getTerminal()) + .build(); + }) + .collect(Collectors.toList())); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasPositionTemplateV2ApiImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasPositionTemplateV2ApiImpl.java new file mode 100644 index 00000000..a008d4ce --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasPositionTemplateV2ApiImpl.java @@ -0,0 +1,78 @@ +package cn.axzo.tyr.server.controller.permission; + +import cn.axzo.basics.common.exception.ServiceException; +import cn.axzo.tyr.client.feign.SaasPositionTemplateApi; +import cn.axzo.tyr.client.model.permission.SaasPermissionGroupInPositionTemplate; +import cn.axzo.tyr.client.model.permission.SaasPositionTemplateExBO; +import cn.axzo.tyr.client.model.permission.SaasPositionTemplateReq; +import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupCodeVO; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.service.RoleService; +import cn.axzo.tyr.server.service.SaasRoleGroupService; +import cn.azxo.framework.common.model.CommonResponse; +import cn.hutool.core.collection.CollectionUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author tanjie@axzo.cn + * @date 2022/7/4 14:04 + */ +@RestController +@Slf4j +@RequiredArgsConstructor +public class SaasPositionTemplateV2ApiImpl implements SaasPositionTemplateApi { + + private final RoleService roleService; + private final SaasRoleGroupService saasRoleGroupService; + + @Override + public CommonResponse> findPositionTemplateWithPermissionGroup(SaasPositionTemplateReq req) { + + if (CollectionUtil.isNotEmpty(req.getPositionTemplateIdList())) { + throw new ServiceException("不支持position id查询,请使用Code"); + } + List saasRoleCategoryVO = roleService.queryByCategoryCode(req.getPositionCodeList()); + + Map categoryVOMap = saasRoleCategoryVO.stream().collect(Collectors.toMap(SaasRoleCategoryVO::getCategoryCode, Function.identity())); + + return CommonResponse.success( + req.getPositionCodeList().stream().map(positionCode -> { + SaasRoleCategoryVO categoryVO = categoryVOMap.get(positionCode); + + // 获取角色分组详情 + List roleGroupCodeList = categoryVO.getRoleGroupCodeVOList().stream().map(SaasRoleGroupCodeVO::getCode).collect(Collectors.toList()); + List saasRoleGroupVOList = saasRoleGroupService.listByCategoryCode(Collections.singletonList(categoryVO.getCategoryCode())); + Map roleGroupVOMap = saasRoleGroupVOList.stream().filter(g -> roleGroupCodeList.contains(g.getCode())).collect(Collectors.toMap(SaasRoleGroupVO::getCode, Function.identity())); + + return categoryVO.getRoleGroupCodeVOList().stream().map(roleGroupCodeVo -> { + SaasPositionTemplateExBO saasPositionTemplateExBO = new SaasPositionTemplateExBO(); + saasPositionTemplateExBO.setName(roleGroupVOMap.get(roleGroupCodeVo.getCode()).getName()); + saasPositionTemplateExBO.setCode(roleGroupCodeVo.getCode()); + saasPositionTemplateExBO.setType(Integer.parseInt(roleGroupVOMap.get(roleGroupCodeVo.getCode()).getWorkspaceTypeCode())); + + List saasPermissionGroupInPositionTemplateList = roleGroupCodeVo.getRoleInfos().stream().map(roleInfo -> { + SaasPermissionGroupInPositionTemplate saasPermissionGroupInPositionTemplate = new SaasPermissionGroupInPositionTemplate(); + saasPermissionGroupInPositionTemplate.setCategoryCode(roleGroupCodeVo.getCode()); + saasPermissionGroupInPositionTemplate.setCategoryName(roleGroupVOMap.get(roleGroupCodeVo.getCode()).getName()); + saasPermissionGroupInPositionTemplate.setPermissionGroupId(roleInfo.getPermissionGroup().get(0).getId()); + saasPermissionGroupInPositionTemplate.setPermissionGroupName(roleInfo.getName()); + return saasPermissionGroupInPositionTemplate; + }).collect(Collectors.toList()); + + saasPositionTemplateExBO.setPermissionGroups(saasPermissionGroupInPositionTemplateList); + return saasPositionTemplateExBO; + }).collect(Collectors.toList()); + }).flatMap(Collection::stream).collect(Collectors.toList()) + ); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasRoleApiImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasRoleApiImpl.java new file mode 100644 index 00000000..953a49b0 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasRoleApiImpl.java @@ -0,0 +1,163 @@ +package cn.axzo.tyr.server.controller.permission; + +import cn.axzo.basics.profiles.api.OperatorProfileServiceApi; +import cn.axzo.basics.profiles.api.UserProfileServiceApi; +import cn.axzo.tyr.client.feign.SaasRoleApi; +import cn.axzo.tyr.client.model.permission.IdentityAndAccountResp; +import cn.axzo.tyr.client.model.permission.WorkspaceGrantAdminRoleByPhoneReq; +import cn.axzo.tyr.client.model.permission.WorkspaceGrantAdminRoleReq; +import cn.axzo.tyr.server.controller.roleuser.RoleUserController; +import cn.azxo.framework.common.model.CommonResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Slf4j +@RestController +public class SaasRoleApiImpl implements SaasRoleApi { + +// @Autowired +// private SaasRoleUserRelationService saasRoleUserRelationService; +// +// @Autowired +// private SaasAccountService accountService; +// +// @Autowired +// private PractitionerProfileService practitionerProfileService; +// @Autowired +// private OperatorServiceImpl operatorService; +// @Autowired +// private RegulatorProfileService regulatorProfileService; + @Autowired + private OperatorProfileServiceApi operatorProfileServiceApi; + @Autowired + private UserProfileServiceApi userProfileServiceApi; + @Autowired + private RoleUserController roleUserController; + + @Override + @Transactional(rollbackFor = Exception.class) + public CommonResponse grantAdminRole(List req) { + // TODO: 2022/6/23 @liuchuntao 先做正常返回 历史编码逻辑需修改 +// var map = req.stream() +// .collect(Collectors.groupingBy(WorkspaceGrantAdminRoleReq::getRoleType)); +// map.forEach((k, v) -> { +// granRoleStrategyManager.getStrategy(k).grantRole(req, v); +// }); + return CommonResponse.success(Boolean.TRUE); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public CommonResponse> grantAdminRoleByPhone( + List req) { +// List list = Lists.newArrayList(); +// +// req.forEach(item -> { +// +// if (null == item.getPhone()) { +// throw new ServiceException("账号为空"); +// } +// //校验账户是否存在 存在继续 不存在-创建账户及身份 +// AccountUserDto accounDto = null; +// var phone = item.getPhone(); +// +// PersonUpdateDto personUpdate = new PersonUpdateDto(). +// setRealName(item.getNickName()). +// setRealNamePinyin(PinyinUtil.getPinyin(item.getNickName())); +// personUpdate.setPhone(phone); +// PersonUnion personUnion = new PersonUnion(); +// personUnion.setPhone(phone); +// +// // 通过手机号这个唯一条件创建人员用户,幂等返回用户 +// PersonProfileDto newPersonProfile; +// Long identityId; +// IdentityType identityType; +// //这里要判断是不是OMS 工作台 // TODO: 2023/8/8 @TanJ 后续需要改成使用WorkspaceTypeEnum判断 +// if (item.getWorkspaceType().equals(6)) { +// //如果是OMS,运营人员 +// PersonUpdateDto personUpdateDto = new PersonUpdateDto(); +// personUpdateDto.setPhone(phone); +// personUpdateDto.setRealName(item.getNickName()); +// personUpdateDto.setRealNamePinyin(PinyinUtil.getPinyin(item.getNickName())); +// OperatorProfileDto withPerson = RpcInternalUtil.checkAndGetData(operatorProfileServiceApi.addOperator(personUpdateDto)); +// newPersonProfile=withPerson.getPersonProfile(); +// identityId= withPerson.getId(); +// identityType= IdentityType.OPERATOR; +// } else if (item.getWorkspaceType().equals(3)) { +// RegulatorUpdateDto regulatorUpdateDto = new RegulatorUpdateDto(); +// RegulatorProfileDto regulatorProfileDto = regulatorProfileService.createWithPerson(regulatorUpdateDto, personUnion, personUpdate); +// newPersonProfile = regulatorProfileDto.getPersonProfile(); +// identityId= regulatorProfileDto.getId(); +// identityType= IdentityType.REGULATOR; +// } else { +// PractitionerAndPersonPostVO practitionerAndPersonPostVO = new PractitionerAndPersonPostVO(); +// practitionerAndPersonPostVO.setUpdate(new PractitionerUpdateDto()); +// +// PersonPostVo personPostVo = new PersonPostVo(); +// personPostVo.setPhone(phone); +// personPostVo.setRealName(item.getNickName()); +// practitionerAndPersonPostVO.setPersonPost(personPostVo); +// PractitionerProfileDto practitionerDto = RpcInternalUtil.checkAndGetData(userProfileServiceApi.postPractitionerProfileWithUnionPerson(practitionerAndPersonPostVO)); +// +// newPersonProfile = practitionerDto.getPersonProfile(); +// identityId= practitionerDto.getId(); +// identityType= IdentityType.PRACTITIONER; +// } +// +// +// +// AccountUserReq accountUserReq = new AccountUserReq(); +// accountUserReq.setPhone(newPersonProfile.getPhone()); +// accountUserReq.setNickname(item.getNickName()); +// accountUserReq.setNaturalPersonId(newPersonProfile.getId()); +// accountUserReq.setType(identityType.equals(IdentityType.OPERATOR) ? 1 : 0); +// accounDto = accountService.createAccount(accountUserReq, 0L); +// //历史代码,暂时屏蔽,上面的创建账号是幂等创建,不会重复创建。 +// /* if (account == null) { +// accounDto = accountService.createAccount(accountUserReq, 0L); +// } else { +// //有账号也不能确认是第一次创建OMS +// accounDto = new AccountUserDto(); +// accounDto.setAccountId(account.getId()); +// accounDto.setPhone(item.getPhone()); +// accounDto.setNickname(item.getNickName()); +// account.setNickname(item.getNickName()); +// account.setNaturalPersonId(newPersonProfile.getId()); +// accountService.updateById(account); +// }*/ +// +// accounDto.setIdentityId(identityId); +// +// UpdateWorkspaceSupAdminDTO dto = UpdateWorkspaceSupAdminDTO.builder() +// .workspaceId(item.getWorkspaceId()) +// .identityType(identityType) +// .identityId(accounDto.getIdentityId()) +// .naturalPersonId(newPersonProfile.getId()) +// .organizationalUnitId(item.getOuId()) +// .workspaceType(item.getWorkspaceType()) +// .build(); +// CreateSuperAdminRoleParam createSuperAdminRoleParam = new CreateSuperAdminRoleParam(); +// createSuperAdminRoleParam.setWorkspaceId(item.getWorkspaceId()); +// createSuperAdminRoleParam.setOuId(item.getOuId()); +// createSuperAdminRoleParam.setIdentityId(accounDto.getIdentityId()); +// createSuperAdminRoleParam.setIdentityType(cn.axzo.tyr.client.model.enums.IdentityType.getIdentityType(dto.getIdentityType().getCode())); +// createSuperAdminRoleParam.setWorkspaceType(dto.getWorkspaceType()); +// createSuperAdminRoleParam.setNaturalPersonId(dto.getNaturalPersonId()); +// roleUserController.createSuperAdminRole(createSuperAdminRoleParam); +// IdentityAndAccountResp resp = new IdentityAndAccountResp(); +// resp.setIdentityId(identityId); +// resp.setIdentityType(identityType); +// resp.setAccountId(accounDto.getAccountId()); +// resp.setPhone(accounDto.getPhone()); +// resp.setRealName(newPersonProfile.getRealName()); +// resp.setNaturalPersonId(newPersonProfile.getId()); +// list.add(resp); +// }); +// return CommonResponse.success(list); + return null; + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasRoleUserRelationApiImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasRoleUserRelationApiImpl.java new file mode 100644 index 00000000..355b17ca --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/SaasRoleUserRelationApiImpl.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.server.controller.permission; + +import cn.axzo.tyr.client.feign.SaasRoleUserRelationApi; +import cn.axzo.tyr.server.service.SaasRoleUserRelationService; +import cn.azxo.framework.common.model.CommonResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author yanglin + */ +@RestController +@RequiredArgsConstructor +public class SaasRoleUserRelationApiImpl implements SaasRoleUserRelationApi { + + private final SaasRoleUserRelationService saasRoleUserRelationService; + + @Override + public CommonResponse deleteByPersonId(Long personId) { + return CommonResponse.success( + saasRoleUserRelationService.deleteByPersonId(personId)); + } + +} \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/model/QueryUserRoleReq.java b/tyr-server/src/main/java/cn/axzo/tyr/server/model/QueryUserRoleReq.java new file mode 100644 index 00000000..989d5ba0 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/model/QueryUserRoleReq.java @@ -0,0 +1,43 @@ +package cn.axzo.tyr.server.model; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author : liuchuntao + * @date : 2022/5/19 15:01 + * @description : 查询用户拥有得角色 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class QueryUserRoleReq { + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 单位Id + */ + private Long ouId; + + /** + * 身份Id列表 + */ + private List identityIds; + + private IdentityType identityType; + + private List roleTypes; + + private List roleIds; + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/model/SaasUserRoleExBO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/model/SaasUserRoleExBO.java new file mode 100644 index 00000000..45fcd0b0 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/model/SaasUserRoleExBO.java @@ -0,0 +1,146 @@ +package cn.axzo.tyr.server.model; + +import cn.axzo.basics.auth.dto.consts.SaasRoleFits; +import cn.axzo.basics.auth.enums.WorkspaceTypeWithLegacyEnum; +import cn.axzo.basics.common.constant.enums.OrganizationalNodeTypeEnum; +import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum; +import cn.axzo.basics.profiles.common.enums.IdentityType; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * + */ +@Getter +@Setter +@ToString +public class SaasUserRoleExBO { + + private Long id; + /** + * 身份Id + */ + private Long identityId; + /** + * 身份类型 + */ + private IdentityType identityType; + /** + * 角色Id + */ + private Long roleId; + /** + * 自然人Id + */ + private Long naturalPersonId; + /** + * 是否删除:0否,other是 + */ + private Long isDelete; + /** + * 创建时间 + */ + private LocalDateTime createAt; + /** + * 更新时间 + */ + private LocalDateTime updateAt; + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; + + private Long ouId; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 资源类型 + */ + private Integer resourceType; + + /** + * 资源Id + */ + private Long resourceId; + + /// 以下是从SaasRole冗余过来的字段 + + private String roleName; + + /** + * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + */ + private String roleType; + + /** + * 1:企业工作台 2:项目工作台 + */ + private WorkspaceTypeWithLegacyEnum workspaceType; + /** + * 角色owner单位Id 实际角色和用户的所属关系 具体查询relation的ouId + */ + private Long ownerOuId; + + /** + * 适用单位类型 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 0都可以用 只会挂在最末级 + */ + private Long fitOuTypeBit; + + /** + * 适用节点类型 1:部门 2:班组 4:小组 只会挂在最末级 + */ + private Long fitOuNodeTypeBit; + + public List getFitOuTypeEnumList() { + return SaasRoleFits.splitToFitOuTypeEnums(this.fitOuTypeBit); + } + + public List getFitOuNodeTypeEnumList() { + return SaasRoleFits.splitToFitOuNodeTypeEnums(this.fitOuNodeTypeBit); + } + + public List getFitOuTypeValueList() { + return SaasRoleFits.splitToFitOuTypeValues(this.fitOuTypeBit); + } + + public List getFitOuNodeTypeValueList() { + return SaasRoleFits.splitToFitOuNodeTypeValues(this.fitOuNodeTypeBit); + } + + public void setFitOuTypeByValues(List fitOuTypeList) { + this.fitOuTypeBit = SaasRoleFits.concatFitOuTypeByValues(fitOuTypeList); + } + + public void setFitOuNodeTypeByValues(List fitOuNodeTypeList) { + this.fitOuNodeTypeBit = SaasRoleFits.concatFitOuNodeTypeByValues(fitOuNodeTypeList); + } + + public void setFitOuTypeByEnums(List fitOuTypeList) { + this.fitOuTypeBit = SaasRoleFits.concatFitOuTypeByList(fitOuTypeList); + } + + public void setFitOuNodeTypeByEnums(List fitOuNodeTypeList) { + this.fitOuNodeTypeBit = SaasRoleFits.concatFitOuNodeTypeByList(fitOuNodeTypeList); + } + + public boolean isFitOuType(Integer ouType) { + return SaasRoleFits.isFitOuType(this.fitOuTypeBit, ouType); + } + + public boolean isFitOuNodeType(Integer ouNodeType) { + return SaasRoleFits.isFitOuNodeType(this.fitOuNodeTypeBit, ouNodeType); + } + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasFeatureDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasFeatureDao.java index 26244f5d..33c5b29e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasFeatureDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasFeatureDao.java @@ -30,4 +30,5 @@ public interface SaasFeatureDao extends IService { List getChildByParentId(Long parentId); + List listAllFeature(); } \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java index 4f3994e6..e11a6865 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java @@ -5,9 +5,13 @@ import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum; import cn.axzo.tyr.client.model.BaseWorkspaceModel; import cn.axzo.tyr.client.model.enums.IdentityType; +import cn.axzo.tyr.client.model.permission.IdentityAndAccountDTO; +import cn.axzo.tyr.client.model.permission.QueryIdentityByPermissionDTO; import cn.axzo.tyr.client.model.roleuser.dto.IdentityInfo; import cn.axzo.tyr.server.job.UserRoleRelationCleanJob; +import cn.axzo.tyr.server.model.QueryUserRoleReq; import cn.axzo.tyr.server.model.RoleUserInfo; +import cn.axzo.tyr.server.model.SaasUserRoleExBO; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; import cn.hutool.core.collection.CollUtil; @@ -17,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.util.List; @@ -27,6 +32,9 @@ import java.util.stream.Collectors; @Repository public class SaasRoleUserRelationDao extends ServiceImpl { + @Autowired + private SaasRoleUserRelationMapper saasRoleUserRelationMapper; + public List query(Long identityId, Integer identityType, Long workspaceId, Long ouId) { return this.lambdaQuery() .eq(SaasRoleUserRelation::getIdentityId, identityId) @@ -182,5 +190,20 @@ public class SaasRoleUserRelationDao extends ServiceImpl listUserRoleExByParams(QueryUserRoleReq req) { + List list = saasRoleUserRelationMapper.listUserRoleExByParams(req); + return list; + } + + public List findAccountInfosByCode(QueryIdentityByPermissionDTO req) { + List dtoList = saasRoleUserRelationMapper.findIdentityAndAccountInfosByParams(req); + return dtoList; + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/impl/SaasFeatureDaoImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/impl/SaasFeatureDaoImpl.java index e7dc4d03..1340e5f2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/impl/SaasFeatureDaoImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/impl/SaasFeatureDaoImpl.java @@ -60,4 +60,9 @@ public class SaasFeatureDaoImpl extends ServiceImpl listAllFeature() { + return lambdaQuery().eq(BaseEntity::getIsDelete, 0).list(); + } } \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleUserRelationMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleUserRelationMapper.java index af53ee17..2bc1cf0e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleUserRelationMapper.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleUserRelationMapper.java @@ -1,5 +1,9 @@ package cn.axzo.tyr.server.repository.mapper; +import cn.axzo.tyr.client.model.permission.IdentityAndAccountDTO; +import cn.axzo.tyr.client.model.permission.QueryIdentityByPermissionDTO; +import cn.axzo.tyr.server.model.QueryUserRoleReq; +import cn.axzo.tyr.server.model.SaasUserRoleExBO; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -11,6 +15,7 @@ import lombok.NoArgsConstructor; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Set; @Mapper @@ -26,6 +31,10 @@ public interface SaasRoleUserRelationMapper extends BaseMapper listRoleIds(@Param("param") ListRole listRole); + List listUserRoleExByParams(@Param("req") QueryUserRoleReq req); + + List findIdentityAndAccountInfosByParams(@Param("req") QueryIdentityByPermissionDTO req); + @Data @Builder @NoArgsConstructor diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasAuthService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasAuthService.java new file mode 100644 index 00000000..45ae5a4d --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasAuthService.java @@ -0,0 +1,62 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.framework.auth.domain.TerminalInfo; +import cn.axzo.tyr.client.model.permission.BaseAuthorizationReq; +import cn.axzo.tyr.client.model.permission.SaasFeatureTreeResp; +import cn.axzo.tyr.client.model.permission.SaasRoleBO; + +import java.util.List; +import java.util.Map; + +public interface SaasAuthService { + + /** + * @param identityId + * @param workspaceId + * @param ouId 选填,如果是null,就不限制在某个ou里。 + * @return + */ + List getRoles(Long identityId, IdentityType identityType, Long workspaceId, + Long ouId); + + boolean hasLeaderPermission(Long identityId, IdentityType identityType, String featureCode); + + /** + * 检查某个人是否拥有指定featureCode,不管在哪个工作台里面 + * @param identityId + * @param identityType + * @param featureCode + * @return + */ + boolean hasSaasPermissionIgnoreWorkspace(Long identityId, IdentityType identityType, String featureCode); + /** + * 验证指定人是否拥有权限 true为有权限 + * + * @param tm + * @param identityId 身份id + * @param workspaceId 工作台id + * @param ouId 单位id + * @param featureCode 权限码 + * @param workspaceType + * @param workspaceJoinTypes + * @return + */ + @Deprecated + Boolean hasPermission(TerminalInfo tm, Long personId, Long identityId, IdentityType identityType, + Long workspaceId, Long ouId, + String featureCode, Integer workspaceType, List workspaceJoinTypes); + + List listFeatureCode(BaseAuthorizationReq req); + + /** + * 把tree按指定menuType获取Feature + * @param saasFeatureTree + * @return + */ + Map> groupByMenuType(List saasFeatureTree,Integer maxDepth); + + boolean checkFeatureAvailableForWorkspace(Long workspaceId, String featureCode); + + List getProductIdsOfWorkspace(Long workspaceId); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleService.java new file mode 100644 index 00000000..acb23be9 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleService.java @@ -0,0 +1,76 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum; +import cn.axzo.tyr.client.model.permission.SaasRoleBO; +import cn.axzo.tyr.client.model.permission.SaasRoleDTO; +import cn.axzo.tyr.client.model.permission.SaasRoleExBO; +import cn.axzo.tyr.client.model.permission.SaasRoleExReq; +import cn.axzo.tyr.server.repository.entity.SaasRole; + +import java.util.List; + +/** + * saas-角色(SaasRole)表服务接口 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +public interface SaasRoleService { + + /** + * 创建: + * 创建角色 + * input : 角色名称、角色类型、角色所属单位id、角色所属于工作台id、角色所属于工作台类型; + * output: (created entity) + * + * @return + */ + SaasRole create(SaasRoleDTO req); + + /** + * 更新角色 + * + * @return + */ + Boolean update(SaasRoleDTO resRoleDTO); + + /** + * 根据主键id 查询实体 + * + * @param roleId + * @return + */ + SaasRoleBO getById(Long roleId); + + /** + * 根据 id 集合查询 实体集合 + * + * @param roleIds + * @return + */ + List listByIds(List roleIds); + + List listRoleExByParams(SaasRoleExReq req); + + /** + * 通过角色名获取角色id + * + * @param roleName 角色名 + * @param positionTypeId 模板id + * @param workspaceId 项目id + * @param ownerOuId 所属单位ID + * @return 角色id + */ + Long getRoleId(String roleName, Long positionTypeId, Long workspaceId, Long ownerOuId); + + /** + * 获取单位在工作台类型 + */ + int getOrganizationalUnitBitValue(Long workspaceId, Long ouId); + + /** + * 获取单位在工作台类型 + */ + int getOrganizationalUnitBitValue(Long workspaceId, Long ouId, OrganizationalUnitTypeEnum byType); +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java index 0d24c505..48dc9787 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java @@ -1,14 +1,15 @@ package cn.axzo.tyr.server.service; +import cn.axzo.basics.profiles.common.enums.IdentityType; import cn.axzo.framework.domain.page.PageResp; +import cn.axzo.tyr.client.model.permission.IdentityAndAccountDTO; +import cn.axzo.tyr.client.model.permission.QueryIdentityByPermissionDTO; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserDTO; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO; import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; -import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -25,4 +26,18 @@ public interface SaasRoleUserRelationService extends IService listV2(ListRoleUserRelationParam param); cn.axzo.foundation.page.PageResp page(PageRoleUserRelationParam param); + + /** + * 是超管 + * + * @param identityId + * @param workspaceId + * @param ouId + * @return + */ + boolean isSuperAdmin(Long identityId, IdentityType identityType, Long workspaceId, Long ouId); + + Boolean deleteByPersonId(Long personId); + + List findIdentityAndAccountInfosByParams(QueryIdentityByPermissionDTO req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ContextAwareBaseService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ContextAwareBaseService.java new file mode 100644 index 00000000..639e1b4a --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ContextAwareBaseService.java @@ -0,0 +1,52 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.basics.profiles.dto.basic.IdentityProfileDto; +import cn.axzo.framework.auth.domain.ContextInfo; +import cn.axzo.framework.auth.domain.ContextInfoHolder; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public abstract class ContextAwareBaseService { + +// @Autowired +// IdentityProfileService identityProfileService; + + +// @Autowired +// OrganizationalUnitService organizationalUnitService; + + protected void checkWorkspace(Long workspaceId) { + ContextInfo contextInfo = ContextInfoHolder.get(); +// if (null != contextInfo) { +// if (!NumUtil.equals(contextInfo.getWorkspaceId(), workspaceId)) { +// String msg = String.format("输入的工作台与当前Context工作台不一致, contextInfo.workspace=%d, params.workspaceId=%d", +// contextInfo.getWorkspaceId(), workspaceId); +// log.error(msg); +// // 以后稍微稳定一些了再抛异常吧。 +// // throw new ServiceException(msg); +// } +// } + + } + + protected IdentityProfileDto checkIdentity(Long identityId, IdentityType identityType) { +// if(identityId == null || NumUtil.equals(identityId, 0L)) +// throw new ServiceException("身份错误"); +// +// if (identityType == null) + return null; + +// Optional profile = identityProfileService.findIdentityProfile(identityId, identityType); +// if (!profile.isPresent()) +// throw new ServiceException(String.format("找不到相关身份ID=%d的信息", identityId)); +// return profile.get(); + } + +// protected OrganizationalUnitBO checkAndReturnOU(Long ouId) { +// if(NumUtil.isZero(ouId)) +// throw new ServiceException("单位为空"); +// return organizationalUnitService.getUnit(ouId); +// } + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasAuthServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasAuthServiceImpl.java new file mode 100644 index 00000000..49c79095 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasAuthServiceImpl.java @@ -0,0 +1,299 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.util.NumberUtil; +import cn.axzo.basics.profiles.common.enums.IdentityType; +import cn.axzo.framework.auth.domain.TerminalInfo; +import cn.axzo.pudge.core.service.ServiceException; +import cn.axzo.thrones.client.saas.ServicePkgClient; +import cn.axzo.thrones.client.saas.entity.serivicepgkproduct.ServicePkgProduct; +import cn.axzo.tyr.client.feign.TyrSaasAuthApi; +import cn.axzo.tyr.client.model.permission.BaseAuthorizationReq; +import cn.axzo.tyr.client.model.permission.SaasFeatureTreeResp; +import cn.axzo.tyr.client.model.permission.SaasRoleBO; +import cn.axzo.tyr.client.model.req.IdentityAuthReq; +import cn.axzo.tyr.client.model.res.IdentityAuthRes; +import cn.axzo.tyr.server.service.SaasAuthService; +import cn.axzo.tyr.server.service.SaasFeatureService; +import cn.axzo.tyr.server.service.SaasRoleService; +import cn.axzo.tyr.server.service.SaasRoleUserRelationService; +import cn.azxo.framework.common.logger.MethodAroundLog; +import cn.azxo.framework.common.model.CommonResponse; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 原本这个类名字叫AuthorizationService。 + * 但后来写着写着就发现,这个类高度依赖workspace。 + * 没有workspace的RBAC校验,如果也兼容在这个类里,逻辑就太复杂了,另行设计。 + * + * + * @author : liuchuntao + * @date : 2022/6/14 18:31 + * @description : 权限相关Service + */ +@Slf4j +@Service +@RefreshScope +public class SaasAuthServiceImpl implements SaasAuthService { + + @Autowired + private SaasFeatureService saasFeatureService; + + @Autowired + private SaasRoleService saasRoleService; + + @Autowired + private ServicePkgClient servicePkgClient; + + @Autowired + private SaasRoleUserRelationService saasRoleUserRelationService; + +// @Autowired +// private SaasPositionPlatPgRelationDao saasPositionPlatPgRelationDao; +// @Autowired +// private PlutoTeamServiceImpl plutoTeamService; + + @Value("${needAuthorize.nonWorkspace:true}") + private boolean nonWorkspaceAuth; + + + /** + * 身份Id 单位Id 工作台Id获取权限Code列表 :非超管 超管调用 + * {@link cn.axzo.basics.auth.service.SaasFeatureService#listCodeByProductIds(List)} + * + * @param req + * @return + */ + @Override + @MethodAroundLog(value = "获取产品对应的权限集") + public List listFeatureCode(BaseAuthorizationReq req) { + List productIds = getProductIdsOfWorkspace(req.getWorkspaceId()); +// +// boolean flag = this.saasRoleUserRelationService.isAnyAdmin(req.getIdentityId(), req.getIdentityType(), req.getWorkspaceId(), req.getOuId()); +// +// if (flag) { +// return saasFeatureService.listCodeByProductIdsAndTerminal(productIds, req.getTerminal()); +// } +// return saasFeatureService.listFeatureCode(req, productIds); + return null; + } + + + @Override + public List getProductIdsOfWorkspace(Long workspaceId) { +// List products = RpcUtil +// .common(servicePkgClient.listProductInWorkSpace(workspaceId)); +// if (CollectionUtil.isEmpty(products)) { +// log.warn("thrones:获取产品列表失败:workspaceId{}", workspaceId); +// throw new ServiceException("当前工作台未找到任何的产品"); +// } +// List productIds = products.stream().map(ServicePkgProduct::getProductId).collect(Collectors.toList()); +// return productIds; + return null; + } + + @Override + public Map> groupByMenuType(List saasFeatureTree, Integer maxDepth) { + HashMap> result = new HashMap<>(); + if (CollectionUtil.isEmpty(saasFeatureTree) || maxDepth <= 0) { + + return result; + } + for (SaasFeatureTreeResp featureTreeResp : saasFeatureTree) { + + List defaultLists = result.getOrDefault(featureTreeResp.getMenuType(), new ArrayList<>()); + if (defaultLists.isEmpty()) { + result.put(featureTreeResp.getMenuType(), defaultLists); + } + defaultLists.add(featureTreeResp); + Map> children = groupByMenuType(featureTreeResp.getChildren(), --maxDepth); + for (Integer childrenKey : children.keySet()) { + List childList = result.getOrDefault(childrenKey, new ArrayList<>()); + if (childList.isEmpty()) { + result.put(childrenKey, childList); + } + childList.addAll(children.get(childrenKey)); + + } + } + return result; + } + + @Override + public List getRoles(Long identityId, IdentityType identityType, Long workspaceId, + Long ouId) { +// SaasRoleQueryDTO dto = new SaasRoleQueryDTO(); +// dto.setOuId(ouId); +// dto.setWorkspaceId(workspaceId); +// dto.setIdentityId(identityId); +// dto.setIdentityType(identityType); +// List saasRoles = saasRoleService.listByIdentityAndSpaceIdAndOuId(dto); +// return saasRoles; + return null; + } + + + /** + * //check平台级的带班长/工人 + * + * @param identityId + * @param identityType + * @param featureCode + * @return + */ + private boolean hasWorkerPermission(Long identityId, IdentityType identityType, + String featureCode) { + //check平台级的带班长/工人 + if (!checkWorkerFeaturePass(identityId, identityType, featureCode)) { + return Boolean.FALSE; + } + return true; + } + + /** + * leader权限 + * + * @param identityId + * @param identityType + * @param featureCode + * @return + */ + @Override + public boolean hasLeaderPermission(Long identityId, IdentityType identityType, + String featureCode) { + //check平台级的班组长 + if (!checkLeaderFeaturePass(identityId, identityType, featureCode)) { + return Boolean.FALSE; + } + return true; + } + + @Override + public boolean hasSaasPermissionIgnoreWorkspace(Long identityId, IdentityType identityType, String featureCode) { +// return saasRoleUserRelationService.hasSaasPermissionIgnoreWorkspace(identityId, identityType, featureCode); + return false; + } + + /** + * TODO: @gaowei,用cache、内存把整个权限服务包住 + *

+ * 验证指定人是否拥有权限 true为有权限 + * + * @param tm + * @param identityId 身份id + * @param workspaceId 工作台id + * @param ouId 单位id + * @param featureCode 权限码 + * @param workspaceType + * @param workspaceJoinTypes + * @return + */ + @Override + public Boolean hasPermission(TerminalInfo tm, Long personId, Long identityId, IdentityType identityType, + Long workspaceId, Long ouId, String featureCode, Integer workspaceType, List workspaceJoinTypes) { + if (StrUtil.isBlank(featureCode)) { + throw new ServiceException("非法请求,缺少FeatureCode参数"); + } + //log.info("权限校验快速放过 - 先支持测试,同步修。 identityId={}, workspaceId={}, ouId={}, featureCode={}", + // identityId, workspaceId, ouId, featureCode); + //check平台级的带班长/工人 + if (identityType == IdentityType.WORKER) { + return hasWorkerPermission(identityId, identityType, featureCode); + } + //check班组长 + if (identityType == IdentityType.WORKER_LEADER) { + return hasLeaderPermission(identityId, identityType, featureCode); + } + + // 非工作台内直接放行 + if (!NumberUtil.isPositiveNumber(workspaceId) && nonWorkspaceAuth) { + return true; + } + +// IdentityAuthRes result = RpcUtil.apiResult(tyrSaasAuthApi.findIdentityAuth(IdentityAuthReq.builder() +// .personId(personId) +// .featureCode(CollectionUtil.newHashSet(featureCode)) +// .workspaceOusPairs(Collections.singletonList(IdentityAuthReq.WorkspaceOuPair.builder() +// .workspaceId(workspaceId) +// .ouId(ouId) +// .build())) +// .build())); +// +// if (null == result) { + return false; +// } +// List permissions = result.getPermissions(); +// List permissionPoints = permissions.stream().filter(e -> Objects.equals(e.getWorkspaceId(), workspaceId) && Objects.equals(e.getOuId(), ouId)).map(IdentityAuthRes.WorkspacePermission::getPermissionPoint).flatMap(List::stream).collect(Collectors.toList()); +// return CollectionUtil.isNotEmpty(result.getPermissions()) && permissionPoints.stream().anyMatch(e -> Objects.equals(e.getFeatureCode(), featureCode)); + } + + private boolean checkLeaderFeaturePass(Long identityId, IdentityType identityType, + String featureCode) { +// return saasFeatureService.checkCodeAndTerminalPass(featureCode, +// Arrays.asList(TerminalInfo.NT_CM_APP_CM_LEADER)); + return false; + } + + /** + * 校验带班长/工人权限通过 + * + * @param identityId + * @param identityType + * @param featureCode + * @return + */ + private boolean checkWorkerFeaturePass(Long identityId, IdentityType identityType, + String featureCode) { +// if (saasPositionPlatPgRelationDao.needCheckFeaturePosition(featureCode)) { +// Long currentTeamOuId = plutoTeamService.getCurrentTeamOuId(identityId, identityType); +// if (!NumberUtil.isPositiveNumber(currentTeamOuId)) { +// return false; +// } +// +// // 平台级代班长code校验 +// if (!saasPositionPlatPgRelationDao.checkFeaturePosition(identityId, identityType, +// currentTeamOuId, featureCode)){ +// // 项目内代班长校验 ,没有进行workspaceId的判断因为目前业务上会进行判断,所以这边只要校验他在任意一个项目部里面有权限就可 +// return hasSaasPermissionIgnoreWorkspace(identityId, identityType, featureCode); +// } + return true; +// } +// +// return saasFeatureService.checkCodeAndTerminalPass(featureCode, +// Arrays.asList(TerminalInfo.NT_CM_APP_CM_WORKER, TerminalInfo.NT_CM_APP_CM_LEADER)); + } + + @Override + public boolean checkFeatureAvailableForWorkspace(Long workspaceId, String featureCode) { +// CommonResponse> rsp = this.servicePkgClient.listProductInWorkSpace(workspaceId); +// if (rsp.getCode() != 200) +// throw new ServiceException("获取workspace相关服务包信息失败:" + rsp.getMsg()); +// +// List list = rsp.getData(); +// if (list == null || list.isEmpty()) { +// log.warn("获取workspace相关服务包信息成功,但内容为空。workspaceId={}", workspaceId); +// return false; +// } +// +// List pkgIds = list.stream().map(ServicePkgProduct::getProductId).collect(Collectors.toList()); +// +// if (this.saasFeatureService.checkFeatureInProductModule(featureCode, pkgIds)) +// return true; + + return false; + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleServiceImpl.java new file mode 100644 index 00000000..cfd0d550 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleServiceImpl.java @@ -0,0 +1,291 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.apollo.core.utils.ResultUtil; +import cn.axzo.apollo.workspace.api.workspace.ParticipatingUnitApi; +import cn.axzo.apollo.workspace.api.workspace.WorkspaceApi; +import cn.axzo.apollo.workspace.api.workspace.res.GetDetailRes; +import cn.axzo.basics.auth.enums.RoleType; +import cn.axzo.basics.common.BeanMapper; +import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.basics.common.util.AssertUtil; +import cn.axzo.basics.common.util.NumberUtil; +import cn.axzo.pudge.core.service.ServiceException; +import cn.axzo.tyr.client.model.permission.SaasRoleBO; +import cn.axzo.tyr.client.model.permission.SaasRoleDTO; +import cn.axzo.tyr.client.model.permission.SaasRoleExBO; +import cn.axzo.tyr.client.model.permission.SaasRoleExReq; +import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao; +import cn.axzo.tyr.server.repository.dao.SaasRoleDao; +import cn.axzo.tyr.server.repository.entity.SaasRole; +import cn.axzo.tyr.server.service.SaasRoleService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @author cn + * @version 1.0 + * @description + * @date 2022/5/24 14:02 + */ +@Slf4j +@Service +public class SaasRoleServiceImpl extends ContextAwareBaseService implements SaasRoleService { + @Autowired + private WorkspaceApi workspaceApi; + @Resource + private SaasRoleDao saasRoleDao; + @Resource + private SaasPgroupRoleRelationDao saasPgroupRoleRelationDao; + @Autowired + private ParticipatingUnitApi participatingUnitApi; + + private void checkRoleName(Long roleId, String name, Long workspaceId, Long ouId) { + List saasRoles = saasRoleDao.listCommonRoleByNameAndWorkspaceIdAndOuId(name, + workspaceId, ouId); + if (NumberUtil.isPositiveNumber(roleId)) { + if (saasRoles.stream().anyMatch(e -> !Objects.equals(e.getId(), roleId))) { + AssertUtil.fail("已存在相同的角色名称,请更换角色名称"); + } + } else { + AssertUtil.isEmpty(saasRoles, "已存在相同的角色名称,请更换角色名称"); + } + } + + @Override + public SaasRole create(SaasRoleDTO req) { + /** + * 1. 检查角色名是否重复 + * 2. 保存新的角色 + * 3. 保存角色权限集关联表 + */ + SaasRole role = new SaasRole(); + role.setDescription(req.getDescription()); + role.setName(req.getName()); + checkRoleName(req.getId(), req.getName(), req.getWorkspaceId(), req.getOwnerOuId()); + role.setWorkspaceId(req.getWorkspaceId()); + // 单位id + role.setOwnerOuId(req.getOwnerOuId()); + if (NumberUtil.isPositiveNumber(req.getOwnerOuId())) { + // 查询参见单位表数据 +// List participatingUnitResList = RpcUtil.common( +// participatingUnitApi.getList(ParticipatingUnitReq.builder().workspaceId(req.getWorkspaceId()).level(req.getWorkspaceType()).build())); +// if(!CollectionUtils.isEmpty(participatingUnitResList)){ +// // 总包设置单位类型为65535 +// if(req.getWorkspaceType() == WorkspaceTypeEnum.GENERAL_ENT.value){ +// role.setFitOuTypeBit(65535L); +// }else{ +// // 单位加入工作台时的类型 +// role.setFitOuTypeByValues(Lists.newArrayList(participatingUnitResList.get(0).getUnitRoleType())); +// } +// } + } + role.setRoleType( + StringUtils.isEmpty(req.getRoleType()) ? RoleType.COMMON.getValue() : req.getRoleType()); + Integer workSpaceType=req.getWorkspaceType(); + if (!NumberUtil.isPositiveNumber(req.getWorkspaceType())) { + log.info("创建角色,请求apollo开始:{}", req); + GetDetailRes workspaceResult = ResultUtil.getWorkspaceResult(() -> workspaceApi.getById(req.getWorkspaceId())); + AssertUtil.notNull(workspaceResult, "创建失败,所属工作台信息获取失败"); + log.info("创建角色,请求apollo结束:{}", workspaceResult); + workSpaceType = workspaceResult.getWorkspaceType(); + } +// WorkspaceTypeWithLegacyEnum workspaceTypeWithLegacyEnum = WorkspaceTypeWithLegacyEnum.getByCode(workSpaceType); +// AssertUtil.notNull(workspaceTypeWithLegacyEnum, "所属工作台类型不匹配,创建角色失败"); +// role.setWorkspaceType(workspaceTypeWithLegacyEnum); +// role.setIsDelete(0L); +// role.setPositionTemplateId(req.getPositionTemplateId()); +// saasRoleDao.save(role); +// +// if (CollUtil.isNotEmpty(req.getGroupIds())) { +// List relations = new ArrayList<>(); +// req.getGroupIds().forEach(k -> { +// SaasPgroupRoleRelation relation = new SaasPgroupRoleRelation(); +// relation.setRoleId(role.getId()); +// relation.setGroupId(k); +// relations.add(relation); +// }); +// saasPgroupRoleRelationDao.saveBatch(relations); +// } + + return role; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean update(SaasRoleDTO resRoleDTO) { + if (resRoleDTO.getId() == null || resRoleDTO.getId() == 0) { + throw new ServiceException("未获取到角色Id"); + } + SaasRole oldRole = saasRoleDao.getById(resRoleDTO.getId()); + + if (oldRole == null || oldRole.getIsDelete() != 0) { + throw new ServiceException("对应角色已删除,不能进行更新处理"); + } + checkRoleName(oldRole.getId(), resRoleDTO.getName(), resRoleDTO.getWorkspaceId(), + resRoleDTO.getOwnerOuId()); + // 更新角色 + oldRole.setName(resRoleDTO.getName()); + oldRole.setDescription(resRoleDTO.getDescription()); + oldRole.setRoleType(resRoleDTO.getRoleType()); + oldRole.setIsDelete(TableIsDeleteEnum.NORMAL.value); + oldRole.setUpdateAt(new Date()); + saasRoleDao.updateById(oldRole); + +// // 更新角色权限集对应关系 +// // 获取角色对应权限集 +// List roleRelations = saasPgroupRoleRelationDao.listByRoleId(resRoleDTO.getId()); +// List oldGroupIds = roleRelations.stream().map(SaasPgroupRoleRelation::getGroupId) +// .collect(Collectors.toList()); +// // 获取交集 +// List innerArr = oldGroupIds.stream().filter(item -> resRoleDTO.getGroupIds().contains(item)) +// .collect(Collectors.toList()); +// // 删除多余老数据 +// oldGroupIds.removeAll(innerArr); +// saasPgroupRoleRelationDao.deleteByGroupIdsAndRoleId(oldGroupIds, oldRole.getId()); +// // 更新新加数据 +// List newGroupIds = resRoleDTO.getGroupIds(); +// newGroupIds.removeAll(innerArr); +// List relations = new ArrayList<>(); +// newGroupIds.stream().forEach(k -> { +// SaasPgroupRoleRelation relation = new SaasPgroupRoleRelation(); +// relation.setRoleId(oldRole.getId()); +// relation.setGroupId(k); +// relations.add(relation); +// }); +// if (!CollectionUtils.isEmpty(relations)) { +// saasPgroupRoleRelationDao.saveBatch(relations); +// } + + return true; + } + + @Override + public SaasRoleBO getById(Long roleId) { + SaasRole saasRole = saasRoleDao.getById(roleId); + return BeanMapper.copyBean(saasRole, SaasRoleBO.class); + } + + @Override + public List listByIds(List roleIds) { + List saasRoles = saasRoleDao.lambdaQuery().in(SaasRole::getId, roleIds) + .eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + + return saasRoles; + } + + @Override + public List listRoleExByParams(SaasRoleExReq req) { +// List list = this.saasRoleDao.listPermissionGroupExByParams(req); +// +// Map> map = list.stream().collect(Collectors.groupingBy(SaasPermissionGroupExBO::getRoleId)); + + List roleList = new ArrayList<>(); + +// for(Entry> entry : map.entrySet()) { +// SaasRoleExBO role = new SaasRoleExBO(); +// BeanUtil.copyProperties(entry.getValue().get(0), role, true); +// roleList.add(role); +// +// role.setPermissionGroupList(entry.getValue().stream().map(gx -> { +// SaasPermissionGroupBO g = new SaasPermissionGroupBO(); +// BeanUtil.copyProperties(gx, g, true); +// return g; +// }).collect(Collectors.toList())); +// } + + return roleList; + } + + @Override + public Long getRoleId(String roleName, Long positionTypeId, Long workspaceId, Long ownerOuId) { +// List saasRoles = saasRoleDao.listCommonRoleIdByNameAndPositionTypeIdAndWorkspaceIdAndOuId(roleName, +// positionTypeId, workspaceId, ownerOuId); +// if (CollectionUtils.isEmpty(saasRoles)) { + return null; +// } +// return saasRoles.get(saasRoles.size() - 1).getId(); + } + + public List checkAndListRole(Long workspaceId, Long ouId) { + int OrganizationalUnitBitValue = getOrganizationalUnitBitValue(workspaceId, ouId); +// return saasRoleDao.listByWorkspaceIdAndFitOutType(workspaceId, OrganizationalUnitBitValue); + return null; + } + + /** + * 获取单位bit类型 + */ + @Override + public int getOrganizationalUnitBitValue(Long workspaceId, Long ouId) { + +// OrganizationalUnitBO unit = organizationalUnitService.getUnit(ouId); +// AssertUtil.isTrue(unit != null, "未找到此单位"); + +// int OrganizationalUnitBitValue = 0; +// // 获取工作台类型 +// GetDetailRes workspaceResult = ResultUtil.getWorkspaceResult(() -> workspaceApi.getById(workspaceId)); +// if(workspaceResult == null){ +// throw new ServiceException("工作台不存在"); +// } +// // 只有项目工作台查询需要使用进入工作台的单位类型查询 +// if(Objects.equals(workspaceResult.getWorkspaceType(), WorkspaceTypeWithLegacyEnum.PROJ_SPACE.getCode())){ +// ParticipatingUnitRes participatingUnitRes = RpcUtil.common(participatingUnitApi.getOne(ParticipatingUnitReq.builder() +// .levels(Collections.singletonList(WorkspaceTypeWithLegacyEnum.PROJ_SPACE.getCode())) +// .workspaceId(workspaceId) +// .organizationUnitId(ouId) +// .build())); +// if(participatingUnitRes == null){ +// throw new ServiceException("未找到参建单位信息"); +// } +// OrganizationalUnitBitValue = OrganizationalUnitTypeEnum.getByType(participatingUnitRes.getUnitRoleType()).getBitValue(); +// } +// return OrganizationalUnitBitValue; + + return 0; + } + + /** + * 获取单位在工作台类型 + */ + @Override + public int getOrganizationalUnitBitValue(Long workspaceId, Long ouId, OrganizationalUnitTypeEnum byType) { + int OrganizationalUnitTypeBitValue = 0; + +// OrganizationalUnitBO unit = organizationalUnitService.getUnit(ouId); +// AssertUtil.isTrue(unit != null, "未找到此单位"); +// +// // 获取工作台类型 +// GetDetailRes workspaceResult = ResultUtil.getWorkspaceResult(() -> workspaceApi.getById(workspaceId)); +// if (workspaceResult == null) { +// throw new ServiceException("工作台不存在"); +// } +// // 只有项目工作台查询需要使用进入工作台的单位类型查询 +// if (Objects.equals(workspaceResult.getWorkspaceType(), WorkspaceTypeWithLegacyEnum.PROJ_SPACE.getCode())) { +// if(byType == null){ +// ParticipatingUnitRes participatingUnitRes = RpcUtil.common(participatingUnitApi.getOne(ParticipatingUnitReq.builder() +// .levels(Collections.singletonList(WorkspaceTypeWithLegacyEnum.PROJ_SPACE.getCode())) +// .workspaceId(workspaceId) +// .organizationUnitId(ouId) +// .build())); +// if (participatingUnitRes == null) { +// throw new ServiceException("未找到参建单位信息"); +// } +// OrganizationalUnitTypeBitValue = OrganizationalUnitTypeEnum.getByType(participatingUnitRes.getUnitRoleType()).getBitValue(); +// }else{ +// OrganizationalUnitTypeBitValue = byType.getBitValue(); +// } +// } + return OrganizationalUnitTypeBitValue; + } + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java index 77b7a3d4..ef35a888 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java @@ -3,18 +3,23 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.basics.profiles.api.UserProfileServiceApi; +import cn.axzo.basics.profiles.common.enums.IdentityType; import cn.axzo.basics.profiles.dto.basic.PersonProfileDto; import cn.axzo.foundation.dao.support.converter.PageConverter; import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; import cn.axzo.framework.domain.page.PageResp; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; +import cn.axzo.tyr.client.model.permission.IdentityAndAccountDTO; +import cn.axzo.tyr.client.model.permission.QueryIdentityByPermissionDTO; import cn.axzo.tyr.client.model.res.SaasRoleRes; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserDTO; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO; import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; +import cn.axzo.tyr.server.model.QueryUserRoleReq; +import cn.axzo.tyr.server.model.SaasUserRoleExBO; import cn.axzo.tyr.server.repository.dao.SaasRoleDao; import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; import cn.axzo.tyr.server.repository.entity.SaasRole; @@ -39,6 +44,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -283,4 +289,38 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl list = this.listUserRoleExByParams(QueryUserRoleReq.builder() + .identityIds(Arrays.asList(identityId)).identityType(identityType).workspaceId(workspaceId).ouId(ouId) + .roleTypes(Arrays.asList(RoleTypeEnum.SUPER_ADMIN.getValue())).build()); + return list.size() > 0; + } + + public List listUserRoleExByParams(QueryUserRoleReq req) { + return saasRoleUserRelationDao.listUserRoleExByParams(req); + } + + @Override + public Boolean deleteByPersonId(Long personId) { + return saasRoleUserRelationDao.lambdaUpdate() + .in(SaasRoleUserRelation::getNaturalPersonId, personId) + .eq(SaasRoleUserRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .setSql(" is_delete=id") + .update(); + } + + @Override + public List findIdentityAndAccountInfosByParams(QueryIdentityByPermissionDTO req) { + return saasRoleUserRelationDao.findAccountInfosByCode(req); + } } diff --git a/tyr-server/src/main/resources/mapper/SaasRoleUserRelationMapper.xml b/tyr-server/src/main/resources/mapper/SaasRoleUserRelationMapper.xml index c3f2882f..b33a5e20 100644 --- a/tyr-server/src/main/resources/mapper/SaasRoleUserRelationMapper.xml +++ b/tyr-server/src/main/resources/mapper/SaasRoleUserRelationMapper.xml @@ -31,4 +31,108 @@ AND workspace_id = #{param.workspaceId} + + + + + + \ No newline at end of file