Commit 2e6ddb3efbdfff37418036f0ba48b3433ce4a76a
1 parent
4c8f4b37
fix: [DEFECT-1541]租户、租户管理员的启用禁用,已登录的租户或租户管理员在禁用后,需重新登录。不能继续操作其他页面
Showing
3 changed files
with
71 additions
and
12 deletions
@@ -23,6 +23,7 @@ import org.thingsboard.server.common.data.id.TenantId; | @@ -23,6 +23,7 @@ import org.thingsboard.server.common.data.id.TenantId; | ||
23 | import org.thingsboard.server.common.data.id.UserId; | 23 | import org.thingsboard.server.common.data.id.UserId; |
24 | import org.thingsboard.server.common.data.query.TsValue; | 24 | import org.thingsboard.server.common.data.query.TsValue; |
25 | import org.thingsboard.server.common.data.security.UserCredentials; | 25 | import org.thingsboard.server.common.data.security.UserCredentials; |
26 | +import org.thingsboard.server.common.data.security.event.UserAuthDataChangedEvent; | ||
26 | import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; | 27 | import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; |
27 | import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; | 28 | import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; |
28 | import org.thingsboard.server.common.data.yunteng.core.cache.CacheUtils; | 29 | import org.thingsboard.server.common.data.yunteng.core.cache.CacheUtils; |
@@ -740,6 +741,31 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE | @@ -740,6 +741,31 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE | ||
740 | return user; | 741 | return user; |
741 | } | 742 | } |
742 | 743 | ||
744 | + @Override | ||
745 | + public void updateTenantAdminUserCredentials( | ||
746 | + List<UserId> ids, | ||
747 | + String currentTenantId, | ||
748 | + boolean userCredentialsEnabled, | ||
749 | + boolean needUpdateStatus) { | ||
750 | + TenantId tenantId = new TenantId(UUID.fromString(currentTenantId)); | ||
751 | + for (UserId id : ids) { | ||
752 | + tbUserService.setUserCredentialsEnabled(tenantId, id, userCredentialsEnabled); | ||
753 | + eventPublisher.publishEvent(new UserAuthDataChangedEvent(id)); | ||
754 | + // 更新租户管理员的状态 | ||
755 | + if (needUpdateStatus) { | ||
756 | + SysUserEntity entity = | ||
757 | + baseMapper.selectOne( | ||
758 | + new LambdaQueryWrapper<SysUserEntity>() | ||
759 | + .eq(SysUserEntity::getTenantId, currentTenantId) | ||
760 | + .eq(SysUserEntity::getTbUser, id.getId().toString())); | ||
761 | + if (null != entity) { | ||
762 | + entity.setEnabled(userCredentialsEnabled); | ||
763 | + baseMapper.updateById(entity); | ||
764 | + } | ||
765 | + } | ||
766 | + } | ||
767 | + } | ||
768 | + | ||
743 | private void checkPassword(AccountReqDTO accountReqDTO, SysUserEntity user) { | 769 | private void checkPassword(AccountReqDTO accountReqDTO, SysUserEntity user) { |
744 | if (null == user | 770 | if (null == user |
745 | || StringUtils.isEmpty(accountReqDTO.getPassword()) | 771 | || StringUtils.isEmpty(accountReqDTO.getPassword()) |
@@ -13,10 +13,12 @@ import org.springframework.scheduling.annotation.Async; | @@ -13,10 +13,12 @@ import org.springframework.scheduling.annotation.Async; | ||
13 | import org.springframework.stereotype.Service; | 13 | import org.springframework.stereotype.Service; |
14 | import org.springframework.transaction.annotation.Transactional; | 14 | import org.springframework.transaction.annotation.Transactional; |
15 | import org.thingsboard.server.common.data.id.EntityId; | 15 | import org.thingsboard.server.common.data.id.EntityId; |
16 | +import org.thingsboard.server.common.data.id.UserId; | ||
16 | import org.thingsboard.server.common.data.query.TsValue; | 17 | import org.thingsboard.server.common.data.query.TsValue; |
17 | import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException; | 18 | import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException; |
18 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; | 19 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; |
19 | import org.thingsboard.server.common.data.yunteng.dto.TenantDTO; | 20 | import org.thingsboard.server.common.data.yunteng.dto.TenantDTO; |
21 | +import org.thingsboard.server.common.data.yunteng.dto.UserDTO; | ||
20 | import org.thingsboard.server.common.data.yunteng.dto.request.TenantReqDTO; | 22 | import org.thingsboard.server.common.data.yunteng.dto.request.TenantReqDTO; |
21 | import org.thingsboard.server.common.data.yunteng.enums.TenantStatusEnum; | 23 | import org.thingsboard.server.common.data.yunteng.enums.TenantStatusEnum; |
22 | import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; | 24 | import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; |
@@ -60,6 +62,7 @@ public class TkTenantServiceImpl extends AbstractBaseService<TenantMapper, SysTe | @@ -60,6 +62,7 @@ public class TkTenantServiceImpl extends AbstractBaseService<TenantMapper, SysTe | ||
60 | private final SysEnterpriseService sysEnterpriseService; | 62 | private final SysEnterpriseService sysEnterpriseService; |
61 | private final UserRoleMapper userRoleMapper; | 63 | private final UserRoleMapper userRoleMapper; |
62 | private final TkDeviceProfileService tkDeviceProfileService; | 64 | private final TkDeviceProfileService tkDeviceProfileService; |
65 | + private final TkUserService tkUserService; | ||
63 | 66 | ||
64 | @Override | 67 | @Override |
65 | @Transactional | 68 | @Transactional |
@@ -276,16 +279,28 @@ public class TkTenantServiceImpl extends AbstractBaseService<TenantMapper, SysTe | @@ -276,16 +279,28 @@ public class TkTenantServiceImpl extends AbstractBaseService<TenantMapper, SysTe | ||
276 | if (!tenantReqDTO.getTenantProfileId().isNullUid()) { | 279 | if (!tenantReqDTO.getTenantProfileId().isNullUid()) { |
277 | tenant.setTenantProfileId(tenantReqDTO.getTenantProfileId().getId().toString()); | 280 | tenant.setTenantProfileId(tenantReqDTO.getTenantProfileId().getId().toString()); |
278 | } | 281 | } |
282 | + String tenantId = tenantReqDTO.getTenantId(); | ||
279 | // update tenant role | 283 | // update tenant role |
280 | // delete | 284 | // delete |
281 | Set<String> tenantIds = new HashSet<>(); | 285 | Set<String> tenantIds = new HashSet<>(); |
282 | - tenantIds.add(tenantReqDTO.getTenantId()); | 286 | + tenantIds.add(tenantId); |
283 | freshTenantAdminRole(tenantIds, Arrays.asList(tenantReqDTO.getRoleIds())); | 287 | freshTenantAdminRole(tenantIds, Arrays.asList(tenantReqDTO.getRoleIds())); |
284 | deleteTenantRolesByTenantId(tenantIds); | 288 | deleteTenantRolesByTenantId(tenantIds); |
285 | deleteTenantMenusByTenantId(tenantIds); | 289 | deleteTenantMenusByTenantId(tenantIds); |
286 | // add | 290 | // add |
287 | - saveTenantMapping(tenantReqDTO.getTenantId(), tenantReqDTO.getRoleIds()); | 291 | + saveTenantMapping(tenantId, tenantReqDTO.getRoleIds()); |
288 | baseMapper.updateById(tenant); | 292 | baseMapper.updateById(tenant); |
293 | + | ||
294 | + //查询所有的租户管理员,并设置租户管理员的凭证 | ||
295 | + List<UserDTO> list = tkUserService.findAllTenantAdminsByTenantId(tenantId); | ||
296 | + if(null != list && !list.isEmpty()){ | ||
297 | + List<UserId> tbList = new ArrayList<>(); | ||
298 | + for (UserDTO userDTO: list){ | ||
299 | + UserId userId = new UserId(UUID.fromString(userDTO.getTbUser())); | ||
300 | + tbList.add(userId); | ||
301 | + } | ||
302 | + tkUserService.updateTenantAdminUserCredentials(tbList,tenantId,tenantReqDTO.isEnabled(),true); | ||
303 | + } | ||
289 | } | 304 | } |
290 | return tenant.getDTO(TenantDTO.class); | 305 | return tenant.getDTO(TenantDTO.class); |
291 | } | 306 | } |
1 | package org.thingsboard.server.dao.yunteng.service; | 1 | package org.thingsboard.server.dao.yunteng.service; |
2 | 2 | ||
3 | +import org.thingsboard.server.common.data.id.UserId; | ||
3 | import org.thingsboard.server.common.data.query.TsValue; | 4 | import org.thingsboard.server.common.data.query.TsValue; |
4 | import org.thingsboard.server.common.data.yunteng.dto.UserDTO; | 5 | import org.thingsboard.server.common.data.yunteng.dto.UserDTO; |
5 | import org.thingsboard.server.common.data.yunteng.dto.UserDetailsDTO; | 6 | import org.thingsboard.server.common.data.yunteng.dto.UserDetailsDTO; |
@@ -19,7 +20,7 @@ import java.util.Set; | @@ -19,7 +20,7 @@ import java.util.Set; | ||
19 | import java.util.concurrent.CompletableFuture; | 20 | import java.util.concurrent.CompletableFuture; |
20 | 21 | ||
21 | public interface TkUserService { | 22 | public interface TkUserService { |
22 | - List<UserDetailsDTO> findUserDetailsByUsername(String username,String tenantId); | 23 | + List<UserDetailsDTO> findUserDetailsByUsername(String username, String tenantId); |
23 | 24 | ||
24 | UserDTO saveAccount( | 25 | UserDTO saveAccount( |
25 | UserDTO userDTO, boolean sendEmail, boolean sendMsg, boolean isTenantAdmin, String tenantId); | 26 | UserDTO userDTO, boolean sendEmail, boolean sendMsg, boolean isTenantAdmin, String tenantId); |
@@ -31,9 +32,8 @@ public interface TkUserService { | @@ -31,9 +32,8 @@ public interface TkUserService { | ||
31 | UserInfoDTO me(String userId, String tenantId, Set<String> currentRoles); | 32 | UserInfoDTO me(String userId, String tenantId, Set<String> currentRoles); |
32 | 33 | ||
33 | TkPageData<UserDTO> page( | 34 | TkPageData<UserDTO> page( |
34 | - Map<String, Object> queryMap, | ||
35 | - boolean isPtSysadmin, | ||
36 | - boolean isTenantAdmin); | 35 | + Map<String, Object> queryMap, boolean isPtSysadmin, boolean isTenantAdmin); |
36 | + | ||
37 | TkPageData<UserDTO> tenantPage(Map<String, Object> queryMap, String tenantId); | 37 | TkPageData<UserDTO> tenantPage(Map<String, Object> queryMap, String tenantId); |
38 | 38 | ||
39 | UserDTO updateUser(UserDTO userDTO, boolean isPtSysadmin, String tenantId); | 39 | UserDTO updateUser(UserDTO userDTO, boolean isPtSysadmin, String tenantId); |
@@ -42,9 +42,9 @@ public interface TkUserService { | @@ -42,9 +42,9 @@ public interface TkUserService { | ||
42 | 42 | ||
43 | UserDTO saveTenantAdmin(UserDTO userDTO, boolean isPtSysadmin, String tenantId); | 43 | UserDTO saveTenantAdmin(UserDTO userDTO, boolean isPtSysadmin, String tenantId); |
44 | 44 | ||
45 | - void resetPassword(String userId, String tenantId,String password); | 45 | + void resetPassword(String userId, String tenantId, String password); |
46 | 46 | ||
47 | - void forgetPassword(String phoneNumber,AccountReqDTO forget); | 47 | + void forgetPassword(String phoneNumber, AccountReqDTO forget); |
48 | 48 | ||
49 | List<UserDetailsDTO> getUserByPhoneNumber(String phoneNumber); | 49 | List<UserDetailsDTO> getUserByPhoneNumber(String phoneNumber); |
50 | 50 | ||
@@ -52,6 +52,7 @@ public interface TkUserService { | @@ -52,6 +52,7 @@ public interface TkUserService { | ||
52 | 52 | ||
53 | /** | 53 | /** |
54 | * 验证租户角色是否有效 | 54 | * 验证租户角色是否有效 |
55 | + * | ||
55 | * @param tenantId | 56 | * @param tenantId |
56 | */ | 57 | */ |
57 | List<SysTenantRoleEntity> validateTenantRole(String tenantId); | 58 | List<SysTenantRoleEntity> validateTenantRole(String tenantId); |
@@ -62,7 +63,7 @@ public interface TkUserService { | @@ -62,7 +63,7 @@ public interface TkUserService { | ||
62 | * | 63 | * |
63 | * @param msg 请求信息 | 64 | * @param msg 请求信息 |
64 | */ | 65 | */ |
65 | - void sendRestPasswordMsg(String tenantId,SendResetPasswordEmailMsg msg); | 66 | + void sendRestPasswordMsg(String tenantId, SendResetPasswordEmailMsg msg); |
66 | 67 | ||
67 | /** | 68 | /** |
68 | * 判断账号是否注册过 | 69 | * 判断账号是否注册过 |
@@ -74,6 +75,7 @@ public interface TkUserService { | @@ -74,6 +75,7 @@ public interface TkUserService { | ||
74 | 75 | ||
75 | /** | 76 | /** |
76 | * 判断电话是否注册过 | 77 | * 判断电话是否注册过 |
78 | + * | ||
77 | * @param phoneNumber 手机号 | 79 | * @param phoneNumber 手机号 |
78 | * @return | 80 | * @return |
79 | */ | 81 | */ |
@@ -110,6 +112,7 @@ public interface TkUserService { | @@ -110,6 +112,7 @@ public interface TkUserService { | ||
110 | 112 | ||
111 | /** | 113 | /** |
112 | * 修改个人中心 | 114 | * 修改个人中心 |
115 | + * | ||
113 | * @param userDTO 修改信息 | 116 | * @param userDTO 修改信息 |
114 | * @return 修改后的信息 | 117 | * @return 修改后的信息 |
115 | */ | 118 | */ |
@@ -117,35 +120,50 @@ public interface TkUserService { | @@ -117,35 +120,50 @@ public interface TkUserService { | ||
117 | 120 | ||
118 | /** | 121 | /** |
119 | * 获取当前用户的客户 | 122 | * 获取当前用户的客户 |
123 | + * | ||
120 | * @param organizationId 组织ID | 124 | * @param organizationId 组织ID |
121 | * @param tenantId 用户ID | 125 | * @param tenantId 用户ID |
122 | * @param isTenantAdmin 是否是租户管理员 | 126 | * @param isTenantAdmin 是否是租户管理员 |
123 | * @return 租户创建的所有用户 | 127 | * @return 租户创建的所有用户 |
124 | */ | 128 | */ |
125 | - List<UserDTO> getMyCustomers(String organizationId,String tenantId,boolean isTenantAdmin); | 129 | + List<UserDTO> getMyCustomers(String organizationId, String tenantId, boolean isTenantAdmin); |
126 | 130 | ||
127 | /** | 131 | /** |
128 | * 异步获取用户列表 | 132 | * 异步获取用户列表 |
133 | + * | ||
129 | * @param startTs 开始时间 | 134 | * @param startTs 开始时间 |
130 | * @param endTs 结束时间 | 135 | * @param endTs 结束时间 |
131 | * @param ts 时间 | 136 | * @param ts 时间 |
132 | * @return 客户信息 | 137 | * @return 客户信息 |
133 | */ | 138 | */ |
134 | - CompletableFuture<TsValue> findUsersAsyncByTs(LocalDateTime startTs, LocalDateTime endTs, long ts); | 139 | + CompletableFuture<TsValue> findUsersAsyncByTs( |
140 | + LocalDateTime startTs, LocalDateTime endTs, long ts); | ||
135 | 141 | ||
136 | /** | 142 | /** |
137 | * 检查账号是否存在 | 143 | * 检查账号是否存在 |
144 | + * | ||
138 | * @param userId 用户ID | 145 | * @param userId 用户ID |
139 | * @param level 级别:0:超级管理员;1:平台管理员;2:租户账号;3:租户下的账号 | 146 | * @param level 级别:0:超级管理员;1:平台管理员;2:租户账号;3:租户下的账号 |
140 | * @return true 存在 false 不存在 | 147 | * @return true 存在 false 不存在 |
141 | */ | 148 | */ |
142 | - UserDTO checkAccount(String userId,Integer level); | 149 | + UserDTO checkAccount(String userId, Integer level); |
143 | 150 | ||
144 | /** | 151 | /** |
145 | * 根据租户ID查询所有的租户管理员 | 152 | * 根据租户ID查询所有的租户管理员 |
153 | + * | ||
146 | * @param tenantId 租户ID | 154 | * @param tenantId 租户ID |
147 | * @return 租户管理员列表 | 155 | * @return 租户管理员列表 |
148 | */ | 156 | */ |
149 | List<UserDTO> findAllTenantAdminsByTenantId(String tenantId); | 157 | List<UserDTO> findAllTenantAdminsByTenantId(String tenantId); |
150 | 158 | ||
159 | + /** | ||
160 | + * 更新租户管理员的用户凭证 | ||
161 | + * | ||
162 | + * @param ids TB用户ID | ||
163 | + * @param currentTenantId 租户ID | ||
164 | + * @param userCredentialsEnabled 用户凭证的启用禁用 | ||
165 | + * @param needUpdateStatus 是否需要更新租户管理员的状态 | ||
166 | + */ | ||
167 | + void updateTenantAdminUserCredentials( | ||
168 | + List<UserId> ids, String currentTenantId, boolean userCredentialsEnabled,boolean needUpdateStatus); | ||
151 | } | 169 | } |