Commit c445361b73a61bb1c4fb70c6b40b6f74ba438ed2

Authored by 黄 x
1 parent 0f0840eb

fix: 修改系统管理员、平台管理员、租户管理员创建用户的BUG,剩余调用TB工作及平台管理员登录

@@ -126,25 +126,24 @@ public class YtUserController extends BaseController { @@ -126,25 +126,24 @@ public class YtUserController extends BaseController {
126 } 126 }
127 127
128 @PostMapping 128 @PostMapping
  129 + @PreAuthorize("hasAnyAuthority('SYS_ADMIN','PLATFORM_ADMIN','TENANT_ADMIN')")
129 public ResponseEntity<UserDTO> addUser( 130 public ResponseEntity<UserDTO> addUser(
130 @RequestParam(value = "sendEmail", required = false, defaultValue = "false") 131 @RequestParam(value = "sendEmail", required = false, defaultValue = "false")
131 boolean sendEmail, 132 boolean sendEmail,
132 @RequestParam(value = "sendMsg", required = false, defaultValue = "false") boolean sendMsg, 133 @RequestParam(value = "sendMsg", required = false, defaultValue = "false") boolean sendMsg,
133 @Validated({AddGroup.class}) @RequestBody UserDTO userDTO) 134 @Validated({AddGroup.class}) @RequestBody UserDTO userDTO)
134 throws ThingsboardException { 135 throws ThingsboardException {
135 - UserDTO newUserDTO =  
136 - userService.saveAccount( 136 + //如果当前用户是租户管理员,则代表创建的用户为CUSTOMER_USER,则需要调用TB,否则为本平台的管理员不需要调用TB
  137 + boolean isTenantAdminOperator = getCurrentUser().isPtTenantAdmin();
  138 + if(isTenantAdminOperator){
  139 +
  140 + }
  141 + return ResponseEntity.ok(userService.saveAccount(
137 userDTO, 142 userDTO,
138 sendEmail, 143 sendEmail,
139 sendMsg, 144 sendMsg,
140 getCurrentUser().isPtSysadmin(), 145 getCurrentUser().isPtSysadmin(),
141 - getCurrentUser().getCurrentTenantId());  
142 - URI location =  
143 - ServletUriComponentsBuilder.fromCurrentRequest()  
144 - .path("{id}")  
145 - .buildAndExpand(newUserDTO.getId())  
146 - .toUri();  
147 - return ResponseEntity.created(location).body(newUserDTO); 146 + getCurrentUser().getCurrentTenantId()));
148 } 147 }
149 148
150 @PreAuthorize("hasAnyAuthority('SYS_ADMIN','PLATFORM_ADMIN')") 149 @PreAuthorize("hasAnyAuthority('SYS_ADMIN','PLATFORM_ADMIN')")
@@ -200,6 +199,7 @@ public class YtUserController extends BaseController { @@ -200,6 +199,7 @@ public class YtUserController extends BaseController {
200 @DeleteMapping 199 @DeleteMapping
201 public void deleteUser(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) 200 public void deleteUser(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO)
202 throws ThingsboardException { 201 throws ThingsboardException {
  202 + //如果当前用户是租户管理员,则代表创建的用户为CUSTOMER_USER,则需要调用TB,否则为本平台的管理员不需要调用TB
203 userService.deleteUser( 203 userService.deleteUser(
204 deleteDTO.getIds(), getCurrentUser().isPtSysadmin(), getCurrentUser().getCurrentTenantId()); 204 deleteDTO.getIds(), getCurrentUser().isPtSysadmin(), getCurrentUser().getCurrentTenantId());
205 } 205 }
@@ -41,13 +41,13 @@ public interface FastIotConstants { @@ -41,13 +41,13 @@ public interface FastIotConstants {
41 public static final int IS_ADMIN=0; 41 public static final int IS_ADMIN=0;
42 42
43 /** 系统平台其他管理员 */ 43 /** 系统平台其他管理员 */
44 - public static final int IS_OTHER_ADMIN = 1; 44 + public static final int IS_PLATFORM_ADMIN = 1;
45 45
46 /** 租户管理员 */ 46 /** 租户管理员 */
47 public static final int IS_TENANT_ADMIN = 2; 47 public static final int IS_TENANT_ADMIN = 2;
48 48
49 - /** 普通用户 */  
50 - public static final int IS_NORMAL = 3; 49 + /** 租户下的用户 */
  50 + public static final int IS_CUSTOMER_USER = 3;
51 } 51 }
52 52
53 interface CacheConfigKey { 53 interface CacheConfigKey {
1 package org.thingsboard.server.dao.yunteng.impl; 1 package org.thingsboard.server.dao.yunteng.impl;
  2 +
2 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
3 import lombok.RequiredArgsConstructor; 5 import lombok.RequiredArgsConstructor;
4 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
5 import org.apache.commons.lang3.ObjectUtils; 7 import org.apache.commons.lang3.ObjectUtils;
  8 +import org.apache.commons.lang3.StringUtils;
6 import org.springframework.stereotype.Service; 9 import org.springframework.stereotype.Service;
  10 +import org.springframework.transaction.annotation.Transactional;
  11 +import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException;
  12 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
7 import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO; 13 import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO;
8 import org.thingsboard.server.dao.yunteng.entities.UserOrganizationMapping; 14 import org.thingsboard.server.dao.yunteng.entities.UserOrganizationMapping;
9 import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper; 15 import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper;
@@ -28,12 +34,9 @@ public class UserOrganizationMappingServiceImpl implements UserOrganizationMappi @@ -28,12 +34,9 @@ public class UserOrganizationMappingServiceImpl implements UserOrganizationMappi
28 private final OrganizationMapper organizationMapper; 34 private final OrganizationMapper organizationMapper;
29 35
30 @Override 36 @Override
31 - public List<String> getUserIdByOrganizationIds(String tenantId,String... ids) { 37 + public List<String> getUserIdByOrganizationIds(String tenantId, String... ids) {
32 List<String> collect = 38 List<String> collect =
33 - organizationMapper  
34 - .findOrganizationTreeList(  
35 - tenantId, List.of(ids))  
36 - .stream() 39 + organizationMapper.findOrganizationTreeList(tenantId, List.of(ids)).stream()
37 .map(OrganizationDTO::getId) 40 .map(OrganizationDTO::getId)
38 .collect(Collectors.toList()); 41 .collect(Collectors.toList());
39 if (ObjectUtils.isEmpty(collect)) { 42 if (ObjectUtils.isEmpty(collect)) {
@@ -48,4 +51,60 @@ public class UserOrganizationMappingServiceImpl implements UserOrganizationMappi @@ -48,4 +51,60 @@ public class UserOrganizationMappingServiceImpl implements UserOrganizationMappi
48 .collect(Collectors.toList()); 51 .collect(Collectors.toList());
49 } 52 }
50 } 53 }
  54 +
  55 + @Override
  56 + @Transactional
  57 + public void addOrUpdateUserOrganizationMapping(
  58 + String userId, List<String> organizationIds, boolean isUpdate) {
  59 + if (StringUtils.isAllEmpty(userId) || null == organizationIds || organizationIds.size() < 1) {
  60 + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  61 + }
  62 + if (isUpdate) {
  63 + // 先删除,再新增
  64 + userOrganizationMappingMapper.delete(
  65 + new LambdaQueryWrapper<UserOrganizationMapping>()
  66 + .eq(UserOrganizationMapping::getUserId, userId));
  67 + }
  68 + batchInsert(userId, organizationIds);
  69 + }
  70 +
  71 + @Override
  72 + public List<String> getUserIdsByOrganizationId(String organizationId) {
  73 + if (StringUtils.isAllEmpty(organizationId)) {
  74 + throw new YtDataValidationException(ErrorMessage.INTERNAL_ERROR.getMessage());
  75 + }
  76 + return userOrganizationMappingMapper
  77 + .selectList(
  78 + new QueryWrapper<UserOrganizationMapping>()
  79 + .lambda()
  80 + .eq(UserOrganizationMapping::getOrganizationId, organizationId))
  81 + .stream()
  82 + .map(UserOrganizationMapping::getUserId)
  83 + .collect(Collectors.toList());
  84 + }
  85 +
  86 + @Override
  87 + public List<String> getOrganizationIdsByUserId(String userId) {
  88 + if (StringUtils.isAllEmpty(userId)) {
  89 + throw new YtDataValidationException(ErrorMessage.INTERNAL_ERROR.getMessage());
  90 + }
  91 + return userOrganizationMappingMapper
  92 + .selectList(
  93 + new QueryWrapper<UserOrganizationMapping>()
  94 + .lambda()
  95 + .eq(UserOrganizationMapping::getUserId, userId))
  96 + .stream()
  97 + .map(UserOrganizationMapping::getOrganizationId)
  98 + .collect(Collectors.toList());
  99 + }
  100 +
  101 + private void batchInsert(String userId, List<String> organizationIds) {
  102 + organizationIds.forEach(
  103 + organizationId -> {
  104 + UserOrganizationMapping userOrganizationMapping = new UserOrganizationMapping();
  105 + userOrganizationMapping.setUserId(userId);
  106 + userOrganizationMapping.setOrganizationId(organizationId);
  107 + userOrganizationMappingMapper.insert(userOrganizationMapping);
  108 + });
  109 + }
51 } 110 }
@@ -209,7 +209,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev @@ -209,7 +209,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev
209 209
210 device.setAlarmStatus(0); 210 device.setAlarmStatus(0);
211 /** 默认待激活状态 */ 211 /** 默认待激活状态 */
212 - device.setDeviceState(DeviceState.INACTIVE); 212 + device.setDeviceState(DeviceState.INACTIVE.name());
213 baseMapper.insert(device); 213 baseMapper.insert(device);
214 return device.getDTO(DeviceDTO.class); 214 return device.getDTO(DeviceDTO.class);
215 } 215 }
@@ -55,13 +55,13 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -55,13 +55,13 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
55 private final TenantMapper tenantMapper; 55 private final TenantMapper tenantMapper;
56 private final RoleMapper roleMapper; 56 private final RoleMapper roleMapper;
57 private final OrganizationMapper organizationMapper; 57 private final OrganizationMapper organizationMapper;
58 - private final UserOrganizationMappingMapper userOrganizationMappingMapper;  
59 private final UserRoleMapper userRoleMapper; 58 private final UserRoleMapper userRoleMapper;
60 private final TenantRoleMapper tenantRoleMapper; 59 private final TenantRoleMapper tenantRoleMapper;
61 60
62 private final YtSmsService ytSmsService; 61 private final YtSmsService ytSmsService;
63 private final YtMessageTemplateService messageTemplateService; 62 private final YtMessageTemplateService messageTemplateService;
64 - private final YtOrganizationService groupService; 63 + private final YtOrganizationService organizationService;
  64 + private final UserOrganizationMappingService userOrganizationMappingService;
65 65
66 public static final String ACTIVATE_URL_PATTERN = "%s/api/noauth/activate?activateToken=%s"; 66 public static final String ACTIVATE_URL_PATTERN = "%s/api/noauth/activate?activateToken=%s";
67 private final PasswordEncoder passwordEncoder; 67 private final PasswordEncoder passwordEncoder;
@@ -75,8 +75,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -75,8 +75,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
75 @Override 75 @Override
76 @Transactional 76 @Transactional
77 public UserDTO saveAccount( 77 public UserDTO saveAccount(
78 - UserDTO userDTO, boolean sendEmail, boolean sendMsg, boolean isPtSysadmin, String tenantId) {  
79 - boolean isAdminOperate = isPtSysadmin; 78 + UserDTO userDTO, boolean sendEmail, boolean sendMsg, boolean isTenantAdmin, String tenantId) {
  79 + boolean isTenantAdminOperate = isTenantAdmin;
80 if (sendMsg && StringUtils.isAllBlank(userDTO.getPhoneNumber())) { 80 if (sendMsg && StringUtils.isAllBlank(userDTO.getPhoneNumber())) {
81 throw new YtDataValidationException( 81 throw new YtDataValidationException(
82 "you must specify user phone number if you want send activate email to this user"); 82 "you must specify user phone number if you want send activate email to this user");
@@ -91,43 +91,22 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -91,43 +91,22 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
91 if (StringUtils.isNotBlank(userDTO.getPassword())) { 91 if (StringUtils.isNotBlank(userDTO.getPassword())) {
92 user.setPassword(passwordEncoder.encode(userDTO.getPassword())); 92 user.setPassword(passwordEncoder.encode(userDTO.getPassword()));
93 } 93 }
94 - if (isAdminOperate) {  
95 - // 添加的租户管理员  
96 - if (StringUtils.isNotBlank(userDTO.getTenantId())) {  
97 - user.setTenantId(userDTO.getTenantId());  
98 - user.setPassword(passwordEncoder.encode(FastIotConstants.DEFAULT_PWD));  
99 - int tenantExist =  
100 - tenantMapper.selectCount(  
101 - new QueryWrapper<Tenant>().lambda().eq(Tenant::getTenantId, userDTO.getTenantId()));  
102 - if (tenantExist == 0) {  
103 - throw new YtDataValidationException("tenant must exist");  
104 - }  
105 - } else {  
106 - // 添加的平台系统其他用户  
107 - user.setLevel(FastIotConstants.LevelValue.IS_OTHER_ADMIN);  
108 - user.setTenantId(tenantId);  
109 - }  
110 - userExist =  
111 - baseMapper.selectCount(  
112 - new QueryWrapper<User>()  
113 - .lambda()  
114 - .eq(User::getUsername, userDTO.getUsername())  
115 - .eq(User::getTenantId, userDTO.getTenantId()))  
116 - > 0;  
117 - } else {  
118 - user.setLevel(FastIotConstants.LevelValue.IS_NORMAL);  
119 - user.setTenantId(tenantId);  
120 - userExist =  
121 - baseMapper.selectCount(  
122 - new QueryWrapper<User>()  
123 - .lambda()  
124 - .eq(User::getUsername, userDTO.getUsername())  
125 - .eq(User::getTenantId, tenantId))  
126 - > 0;  
127 - } 94 + userExist =
  95 + baseMapper.selectCount(
  96 + new QueryWrapper<User>()
  97 + .lambda()
  98 + .eq(User::getUsername, userDTO.getUsername())
  99 + .eq(User::getTenantId, tenantId))
  100 + > 0;
128 if (userExist) { 101 if (userExist) {
129 throw new YtDataValidationException(ErrorMessage.NAME_ALREADY_EXISTS.getMessage()); 102 throw new YtDataValidationException(ErrorMessage.NAME_ALREADY_EXISTS.getMessage());
130 } else { 103 } else {
  104 + user.setPassword(passwordEncoder.encode(FastIotConstants.DEFAULT_PWD));
  105 + user.setTenantId(tenantId);
  106 + user.setLevel(
  107 + isTenantAdminOperate
  108 + ? FastIotConstants.LevelValue.IS_CUSTOMER_USER
  109 + : FastIotConstants.LevelValue.IS_PLATFORM_ADMIN);
131 baseMapper.insert(user); 110 baseMapper.insert(user);
132 for (String roleId : userDTO.getRoleIds()) { 111 for (String roleId : userDTO.getRoleIds()) {
133 // 添加用户角色信息 112 // 添加用户角色信息
@@ -137,7 +116,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -137,7 +116,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
137 userRoleMapper.insert(userRole); 116 userRoleMapper.insert(userRole);
138 } 117 }
139 // 绑定用户和组织的关系 118 // 绑定用户和组织的关系
140 - groupService.bindUserToOrganization(tenantId, user.getId(), userDTO.getOrganizationIds()); 119 + organizationService.bindUserToOrganization(tenantId, user.getId(), userDTO.getOrganizationIds());
141 user.copyToDTO(userDTO, PASSWORD, ACTIVATE_TOKEN); 120 user.copyToDTO(userDTO, PASSWORD, ACTIVATE_TOKEN);
142 return userDTO; 121 return userDTO;
143 } 122 }
@@ -145,10 +124,10 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -145,10 +124,10 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
145 124
146 @Override 125 @Override
147 public void validateUserNameAndPhoneNumberAndEmail(UserDTO userDTO) { 126 public void validateUserNameAndPhoneNumberAndEmail(UserDTO userDTO) {
148 - if(null == userDTO.getId()){ 127 + if (null == userDTO.getId()) {
149 User existUser = 128 User existUser =
150 - baseMapper.selectOne(  
151 - new LambdaQueryWrapper<User>().eq(User::getUsername, userDTO.getUsername())); 129 + baseMapper.selectOne(
  130 + new LambdaQueryWrapper<User>().eq(User::getUsername, userDTO.getUsername()));
152 if (null != existUser) { 131 if (null != existUser) {
153 throw new YtDataValidationException(ErrorMessage.USER_NAME_ALREADY_EXISTS.getMessage()); 132 throw new YtDataValidationException(ErrorMessage.USER_NAME_ALREADY_EXISTS.getMessage());
154 } 133 }
@@ -171,7 +150,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -171,7 +150,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
171 150
172 @Override 151 @Override
173 public UserDTO findUserInfoById(String id) { 152 public UserDTO findUserInfoById(String id) {
174 - if(StringUtils.isEmpty(id)){ 153 + if (StringUtils.isEmpty(id)) {
175 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); 154 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
176 } 155 }
177 return baseMapper.selectById(id).getDTO(UserDTO.class); 156 return baseMapper.selectById(id).getDTO(UserDTO.class);
@@ -264,6 +243,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -264,6 +243,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
264 } 243 }
265 baseMapper.updateById(user); 244 baseMapper.updateById(user);
266 deleteAndAddUserRole(user.getId(), Arrays.asList(userDTO.getRoleIds())); 245 deleteAndAddUserRole(user.getId(), Arrays.asList(userDTO.getRoleIds()));
  246 + userOrganizationMappingService.addOrUpdateUserOrganizationMapping(
  247 + user.getId(), Arrays.asList(userDTO.getOrganizationIds()), true);
267 user.copyToDTO(userDTO, PASSWORD, ACTIVATE_TOKEN); 248 user.copyToDTO(userDTO, PASSWORD, ACTIVATE_TOKEN);
268 return userDTO; 249 return userDTO;
269 } 250 }
@@ -282,7 +263,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -282,7 +263,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
282 if (StringUtils.isEmpty(roleType)) { 263 if (StringUtils.isEmpty(roleType)) {
283 roleType = RoleEnum.PLATFORM_ADMIN.name(); 264 roleType = RoleEnum.PLATFORM_ADMIN.name();
284 userPage = baseMapper.getAdminUserPage(userIPage, tenantId, roleType); 265 userPage = baseMapper.getAdminUserPage(userIPage, tenantId, roleType);
285 - }else{ 266 + } else {
286 userPage = baseMapper.getTenantAdminPage(userIPage, tenantId); 267 userPage = baseMapper.getTenantAdminPage(userIPage, tenantId);
287 } 268 }
288 } else if (isPlatformAdmin) { 269 } else if (isPlatformAdmin) {
@@ -344,7 +325,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -344,7 +325,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
344 325
345 // 3. 解绑人员对应的group 326 // 3. 解绑人员对应的group
346 327
347 - groupService.unBindUserToOrganization(userIds); 328 + organizationService.unBindUserToOrganization(userIds);
348 329
349 // 4. 删除人员 330 // 4. 删除人员
350 baseMapper.deleteBatchIds(userIds); 331 baseMapper.deleteBatchIds(userIds);
@@ -445,15 +426,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -445,15 +426,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
445 if (group == null || !group.getTenantId().equals(tenantId)) { 426 if (group == null || !group.getTenantId().equals(tenantId)) {
446 return Optional.empty(); 427 return Optional.empty();
447 } 428 }
448 - Set<String> userIds =  
449 - userOrganizationMappingMapper  
450 - .selectList(  
451 - new QueryWrapper<UserOrganizationMapping>()  
452 - .lambda()  
453 - .eq(UserOrganizationMapping::getOrganizationId, group))  
454 - .stream()  
455 - .map(UserOrganizationMapping::getUserId)  
456 - .collect(Collectors.toSet()); 429 + List<String> userIds = userOrganizationMappingService.getUserIdsByOrganizationId(group.getId());
457 List<User> users = baseMapper.selectBatchIds(userIds); 430 List<User> users = baseMapper.selectBatchIds(userIds);
458 return Optional.ofNullable(ReflectUtils.sourceToTarget(users, UserDTO.class)); 431 return Optional.ofNullable(ReflectUtils.sourceToTarget(users, UserDTO.class));
459 } 432 }
@@ -474,16 +447,9 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -474,16 +447,9 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
474 return roleIds.toArray(new String[roleIds.size()]); 447 return roleIds.toArray(new String[roleIds.size()]);
475 } 448 }
476 if (roleOrGroupReqDTO.isQueryOrganization()) { 449 if (roleOrGroupReqDTO.isQueryOrganization()) {
477 - List<String> roleIds =  
478 - userOrganizationMappingMapper  
479 - .selectList(  
480 - new QueryWrapper<UserOrganizationMapping>()  
481 - .lambda()  
482 - .eq(UserOrganizationMapping::getUserId, userId))  
483 - .stream()  
484 - .map(UserOrganizationMapping::getOrganizationId)  
485 - .collect(Collectors.toList());  
486 - return roleIds.toArray(new String[roleIds.size()]); 450 + List<String> organizationIds =
  451 + userOrganizationMappingService.getOrganizationIdsByUserId(userId);
  452 + return organizationIds.toArray(new String[organizationIds.size()]);
487 } 453 }
488 return null; 454 return null;
489 } 455 }
@@ -512,8 +478,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -512,8 +478,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
512 public User validateChangePasswordAccount(AccountReqDTO accountReqDTO) { 478 public User validateChangePasswordAccount(AccountReqDTO accountReqDTO) {
513 User user = baseMapper.selectById(accountReqDTO.getUserId()); 479 User user = baseMapper.selectById(accountReqDTO.getUserId());
514 if (null == user 480 if (null == user
515 - || StringUtils.isEmpty(accountReqDTO.getPassword())  
516 - || StringUtils.isEmpty(accountReqDTO.getResetPassword())) { 481 + || StringUtils.isEmpty(accountReqDTO.getPassword())
  482 + || StringUtils.isEmpty(accountReqDTO.getResetPassword())) {
517 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); 483 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
518 } 484 }
519 // 判断用户密码是否正确 485 // 判断用户密码是否正确
@@ -527,19 +493,21 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> @@ -527,19 +493,21 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
527 493
528 /** 494 /**
529 * 先删除用户与角色的关系,再添加新的关系 495 * 先删除用户与角色的关系,再添加新的关系
  496 + *
530 * @param userId 用户ID 497 * @param userId 用户ID
531 * @param roleIds 角色ID 498 * @param roleIds 角色ID
532 */ 499 */
533 - private void deleteAndAddUserRole(String userId,List<String> roleIds){  
534 - if(StringUtils.isAllEmpty(userId) || null == roleIds || roleIds.size()<1){ 500 + private void deleteAndAddUserRole(String userId, List<String> roleIds) {
  501 + if (StringUtils.isAllEmpty(userId) || null == roleIds || roleIds.size() < 1) {
535 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); 502 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
536 } 503 }
537 - //先删除用户与角色的关系,再添加用户与角色的关系 504 + // 先删除用户与角色的关系,再添加用户与角色的关系
538 List<String> userIds = new ArrayList<>(); 505 List<String> userIds = new ArrayList<>();
539 userIds.add(userId); 506 userIds.add(userId);
540 roleMapper.deleteRoleUserMappingByUserIds(userIds); 507 roleMapper.deleteRoleUserMappingByUserIds(userIds);
541 - roleIds.forEach(role ->{  
542 - roleMapper.saveUserRoleMapping(userId,role);  
543 - }); 508 + roleIds.forEach(
  509 + role -> {
  510 + roleMapper.saveUserRoleMapping(userId, role);
  511 + });
544 } 512 }
545 } 513 }
1 package org.thingsboard.server.dao.yunteng.service; 1 package org.thingsboard.server.dao.yunteng.service;
2 2
3 import java.util.List; 3 import java.util.List;
  4 +import java.util.Set;
4 5
5 /** 6 /**
6 * @author: 徐浩然 7 * @author: 徐浩然
@@ -9,5 +10,31 @@ import java.util.List; @@ -9,5 +10,31 @@ import java.util.List;
9 */ 10 */
10 public interface UserOrganizationMappingService { 11 public interface UserOrganizationMappingService {
11 12
12 - List<String> getUserIdByOrganizationIds(String tenantId,String... ids); 13 + List<String> getUserIdByOrganizationIds(String tenantId, String... ids);
  14 +
  15 + /**
  16 + * 添加或更新用户组织关系
  17 + *
  18 + * @param userId 用户ID
  19 + * @param organizationIds 组织列表
  20 + * @param isUpdate true更新 false新增
  21 + */
  22 + void addOrUpdateUserOrganizationMapping(
  23 + String userId, List<String> organizationIds, boolean isUpdate);
  24 +
  25 + /**
  26 + * 根据组织ID查询其用户ID列表
  27 + *
  28 + * @param organizationId 组织ID
  29 + * @return 用户ID集合
  30 + */
  31 + List<String> getUserIdsByOrganizationId(String organizationId);
  32 +
  33 + /**
  34 + * 根据用户ID查询其所拥有的组织ID列表
  35 + *
  36 + * @param userId 用户ID
  37 + * @return 组织ID集合
  38 + */
  39 + List<String> getOrganizationIdsByUserId(String userId);
13 } 40 }
@@ -17,7 +17,7 @@ import java.util.Set; @@ -17,7 +17,7 @@ import java.util.Set;
17 public interface YtUserService { 17 public interface YtUserService {
18 List<UserDetailsDTO> findUserDetailsByUsername(String username); 18 List<UserDetailsDTO> findUserDetailsByUsername(String username);
19 19
20 - UserDTO saveAccount(UserDTO userDTO, boolean sendEmail, boolean sendMsg,boolean isPtSysadmin,String tenantId); 20 + UserDTO saveAccount(UserDTO userDTO, boolean sendEmail, boolean sendMsg,boolean isTenantAdmin,String tenantId);
21 21
22 String getActivationLink(String userId,boolean isPtSysadmin,String tenantId); 22 String getActivationLink(String userId,boolean isPtSysadmin,String tenantId);
23 23