Showing
8 changed files
with
80 additions
and
19 deletions
... | ... | @@ -434,7 +434,7 @@ public abstract class BaseController { |
434 | 434 | return getCurrentUser().getTenantId(); |
435 | 435 | } |
436 | 436 | |
437 | - Customer checkCustomerId(CustomerId customerId, Operation operation) throws ThingsboardException { | |
437 | + protected Customer checkCustomerId(CustomerId customerId, Operation operation) throws ThingsboardException { | |
438 | 438 | try { |
439 | 439 | validateId(customerId, "Incorrect customerId " + customerId); |
440 | 440 | Customer customer = customerService.findCustomerById(getTenantId(), customerId); | ... | ... |
... | ... | @@ -18,10 +18,8 @@ import org.thingsboard.server.common.data.User; |
18 | 18 | import org.thingsboard.server.common.data.audit.ActionType; |
19 | 19 | import org.thingsboard.server.common.data.edge.EdgeEventActionType; |
20 | 20 | import org.thingsboard.server.common.data.exception.ThingsboardException; |
21 | -import org.thingsboard.server.common.data.id.CustomerId; | |
22 | -import org.thingsboard.server.common.data.id.EntityId; | |
23 | -import org.thingsboard.server.common.data.id.TenantId; | |
24 | -import org.thingsboard.server.common.data.id.UserId; | |
21 | +import org.thingsboard.server.common.data.id.*; | |
22 | +import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; | |
25 | 23 | import org.thingsboard.server.common.data.security.Authority; |
26 | 24 | import org.thingsboard.server.common.data.security.UserCredentials; |
27 | 25 | import org.thingsboard.server.common.data.security.event.UserAuthDataChangedEvent; |
... | ... | @@ -177,9 +175,18 @@ public class YtUserController extends BaseController { |
177 | 175 | } |
178 | 176 | |
179 | 177 | @DeleteMapping |
178 | + @PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN')") | |
180 | 179 | public void deleteUser(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) |
181 | 180 | throws ThingsboardException { |
182 | 181 | // 如果当前用户是租户管理员,则代表创建的用户为CUSTOMER_USER,则需要调用TB,否则为本平台的管理员不需要调用TB |
182 | + boolean isTenantAdminOperator = getCurrentUser().isPtTenantAdmin(); | |
183 | + if(isTenantAdminOperator){ | |
184 | + for (String id : deleteDTO.getIds()) { | |
185 | + String customerId = userService.findUserCustomerIdById(id); | |
186 | + //删除Customer_User | |
187 | + deleteCustomer(customerId); | |
188 | + } | |
189 | + } | |
183 | 190 | userService.deleteUser( |
184 | 191 | deleteDTO.getIds(), getCurrentUser().isPtSysadmin(), getCurrentUser().getCurrentTenantId()); |
185 | 192 | } |
... | ... | @@ -331,4 +338,25 @@ public class YtUserController extends BaseController { |
331 | 338 | throw handleException(e); |
332 | 339 | } |
333 | 340 | } |
341 | + | |
342 | + /** | |
343 | + * 删除租户下的客户 | |
344 | + * @param strCustomerId 客户ID | |
345 | + * @throws ThingsboardException tb运行异常 | |
346 | + */ | |
347 | + private void deleteCustomer(String strCustomerId) throws ThingsboardException { | |
348 | + try{ | |
349 | + CustomerId customerId = new CustomerId(toUUID(strCustomerId)); | |
350 | + Customer customer = checkCustomerId(customerId, Operation.DELETE); | |
351 | + List<EdgeId> relatedEdgeIds = findRelatedEdgeIds(getTenantId(), customerId); | |
352 | + customerService.deleteCustomer(getTenantId(), customerId); | |
353 | + logEntityAction(customerId, customer, | |
354 | + customer.getId(), | |
355 | + ActionType.DELETED, null, strCustomerId); | |
356 | + sendDeleteNotificationMsg(getTenantId(), customerId, relatedEdgeIds); | |
357 | + tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), customerId, ComponentLifecycleEvent.DELETED); | |
358 | + }catch (Exception e){ | |
359 | + throw handleException(e); | |
360 | + } | |
361 | + } | |
334 | 362 | } | ... | ... |
... | ... | @@ -31,7 +31,7 @@ public enum ErrorMessage { |
31 | 31 | SEND_DESTINATION_NOT_FOUND(400012,"通知失败!找不到发送目标"), |
32 | 32 | USER_NAME_ALREADY_EXISTS(400013,"用户名已存在"), |
33 | 33 | DATA_ALREADY_EXISTS(400014,"数据已存在,无需重复添加"), |
34 | - CONNECT_TO_TB_ERROR(500001,"与TB联系错误"), | |
34 | + USER_NOT_EXISTS(400015,"用户不存在"), | |
35 | 35 | HAVE_NO_PERMISSION(500002,"没有修改权限"); |
36 | 36 | private final int code; |
37 | 37 | private String message; | ... | ... |
... | ... | @@ -131,7 +131,7 @@ public class YtAlarmInfoServiceImpl implements YtAlarmInfoService { |
131 | 131 | return ytPageData; |
132 | 132 | } catch (Exception e) { |
133 | 133 | log.error("create TBAlarmInfo error {}", e.getMessage()); |
134 | - throw new YtDataValidationException(ErrorMessage.CONNECT_TO_TB_ERROR.getMessage()); | |
134 | + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | |
135 | 135 | } |
136 | 136 | //return getPageData(alarmInfoIPage,AlarmInfoDTO.class); |
137 | 137 | } | ... | ... |
... | ... | @@ -52,7 +52,6 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> |
52 | 52 | |
53 | 53 | private final AdminSettingMapper adminSettingMapper; |
54 | 54 | private final ObjectMapper mapper; |
55 | - private final TenantMapper tenantMapper; | |
56 | 55 | private final RoleMapper roleMapper; |
57 | 56 | private final OrganizationMapper organizationMapper; |
58 | 57 | private final UserRoleMapper userRoleMapper; |
... | ... | @@ -464,6 +463,18 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> |
464 | 463 | } |
465 | 464 | |
466 | 465 | @Override |
466 | + public String findUserCustomerIdById(String id) { | |
467 | + if(StringUtils.isAllEmpty(id)){ | |
468 | + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | |
469 | + } | |
470 | + String customerId = baseMapper.findUserCustomerIdById(id); | |
471 | + if(null == customerId){ | |
472 | + throw new YtDataValidationException(ErrorMessage.USER_NOT_EXISTS.getMessage()); | |
473 | + } | |
474 | + return customerId; | |
475 | + } | |
476 | + | |
477 | + @Override | |
467 | 478 | public UserDTO accountExist(String userName, String tenantId) { |
468 | 479 | if (StringUtils.isEmpty(userName)) { |
469 | 480 | throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | ... | ... |
... | ... | @@ -35,4 +35,6 @@ public interface UserMapper extends BaseMapper<User> { |
35 | 35 | @Param("userId") String userId, @Param("activeToken") String activeToken); |
36 | 36 | |
37 | 37 | UserDTO findUserInfo(UserDTO userDTO); |
38 | + | |
39 | + String findUserCustomerIdById(@Param("userId") String userId); | |
38 | 40 | } | ... | ... |
... | ... | @@ -17,23 +17,29 @@ import java.util.Set; |
17 | 17 | public interface YtUserService { |
18 | 18 | List<UserDetailsDTO> findUserDetailsByUsername(String username); |
19 | 19 | |
20 | - UserDTO saveAccount(UserDTO userDTO, boolean sendEmail, boolean sendMsg,boolean isTenantAdmin,String tenantId); | |
20 | + UserDTO saveAccount( | |
21 | + UserDTO userDTO, boolean sendEmail, boolean sendMsg, boolean isTenantAdmin, String tenantId); | |
21 | 22 | |
22 | - String getActivationLink(String userId,boolean isPtSysadmin,String tenantId); | |
23 | + String getActivationLink(String userId, boolean isPtSysadmin, String tenantId); | |
23 | 24 | |
24 | - Optional<UserDTO> getUser(String userId,boolean isPtSysadmin,String tenantId); | |
25 | + Optional<UserDTO> getUser(String userId, boolean isPtSysadmin, String tenantId); | |
25 | 26 | |
26 | - UserInfoDTO me(String userId,String tenantId,Set<String> currentRoles); | |
27 | + UserInfoDTO me(String userId, String tenantId, Set<String> currentRoles); | |
27 | 28 | |
28 | - YtPageData<UserDTO> page(Map<String, Object> queryMap, boolean isPtSysadmin, boolean isPlatformAdmin, boolean isTenantAdmin, String tenantId); | |
29 | + YtPageData<UserDTO> page( | |
30 | + Map<String, Object> queryMap, | |
31 | + boolean isPtSysadmin, | |
32 | + boolean isPlatformAdmin, | |
33 | + boolean isTenantAdmin, | |
34 | + String tenantId); | |
29 | 35 | |
30 | - UserDTO updateUser(UserDTO userDTO,boolean isPtSysadmin,String tenantId); | |
36 | + UserDTO updateUser(UserDTO userDTO, boolean isPtSysadmin, String tenantId); | |
31 | 37 | |
32 | - boolean deleteUser(Set<String> userIds,boolean isPtSysadmin,String tenantId); | |
38 | + boolean deleteUser(Set<String> userIds, boolean isPtSysadmin, String tenantId); | |
33 | 39 | |
34 | - UserDTO saveTenantAdmin(UserDTO userDTO,boolean isPtSysadmin,String tenantId); | |
40 | + UserDTO saveTenantAdmin(UserDTO userDTO, boolean isPtSysadmin, String tenantId); | |
35 | 41 | |
36 | - void resetPassword(String userId,boolean isPtSysadmin,String tenantId); | |
42 | + void resetPassword(String userId, boolean isPtSysadmin, String tenantId); | |
37 | 43 | |
38 | 44 | List<UserDetailsDTO> getUserByPhoneNumber(String phoneNumber); |
39 | 45 | |
... | ... | @@ -53,11 +59,12 @@ public interface YtUserService { |
53 | 59 | * @param username 账号 |
54 | 60 | * @return 账号信息 |
55 | 61 | */ |
56 | - UserDTO accountExist(String username,String tenantId); | |
62 | + UserDTO accountExist(String username, String tenantId); | |
57 | 63 | |
58 | 64 | User validateChangePasswordAccount(AccountReqDTO accountReqDTO); |
59 | 65 | |
60 | - Optional<List<UserDTO>> getOrganizationUserByOrganizationId(String organizationId,String tenantId); | |
66 | + Optional<List<UserDTO>> getOrganizationUserByOrganizationId( | |
67 | + String organizationId, String tenantId); | |
61 | 68 | |
62 | 69 | /** |
63 | 70 | * 查询用户关联的Role或者Group |
... | ... | @@ -74,4 +81,12 @@ public interface YtUserService { |
74 | 81 | * @return 修改成功、失败 |
75 | 82 | */ |
76 | 83 | boolean changePassword(User user); |
84 | + | |
85 | + /** | |
86 | + * 通过用户ID查找TB的CustomerId | |
87 | + * | |
88 | + * @param id 用户ID | |
89 | + * @return CustomerId | |
90 | + */ | |
91 | + String findUserCustomerIdById(String id); | |
77 | 92 | } | ... | ... |
... | ... | @@ -172,4 +172,9 @@ |
172 | 172 | WHERE su.username=#{username} |
173 | 173 | AND su.tenant_id=#{tenantId} |
174 | 174 | </select> |
175 | + | |
176 | + <select id="findUserCustomerIdById" resultType="java.lang.String"> | |
177 | + SELECT tu.customer_id FROM sys_user su LEFT JOIN tb_user tu ON su.tb_user = CAST(tu.id AS VARCHAR) | |
178 | + WHERE su.id = #{userId} | |
179 | + </select> | |
175 | 180 | </mapper> | ... | ... |