Commit a6d21805178b5f209db5a8b719ceea8b79b01cac

Authored by chenjunyu_1481036421
1 parent 378c34f1

feat:OpenApi应用新增租户权限,涉及api新增openapiUser权限过滤

... ... @@ -43,12 +43,8 @@ public class HomePageController extends BaseController {
43 43 public HomeDeviceInfoDTO getOpenApiDeviceInfo()
44 44 throws ThingsboardException, ExecutionException, InterruptedException {
45 45 return homePageService.getOpenApiDeviceInfo(
46   - getCurrentUser().isPtSysadmin(),
47   - getCurrentUser().isPtAdmin(),
48   - getCurrentUser().isPtTenantAdmin(),
49   - getCurrentUser().isPtCommonTenant(),
50 46 getCurrentUser().getCurrentTenantId(),
51   - getCurrentUser().getCurrentUserId(), getCurrentUser().getCustomerId()==null?null:getCurrentUser().getCustomerId().getId().toString());
  47 + getCurrentUser().getCurrentUserId());
52 48 }
53 49
54 50
... ... @@ -57,12 +53,8 @@ public class HomePageController extends BaseController {
57 53 public BaseHomePageTop getOpenApiAlarmInfo()
58 54 throws ThingsboardException, ExecutionException, InterruptedException {
59 55 return homePageService.getOpenApiAlarmInfo(
60   - getCurrentUser().isPtSysadmin(),
61   - getCurrentUser().isPtAdmin(),
62   - getCurrentUser().isPtTenantAdmin(),
63   - getCurrentUser().isPtCommonTenant(),
64 56 getCurrentUser().getCurrentTenantId(),
65   - getCurrentUser().getCurrentUserId(), getCurrentUser().getCustomerId()==null?null:getCurrentUser().getCustomerId().getId().toString());
  57 + getCurrentUser().getCurrentUserId());
66 58 }
67 59 @GetMapping("left/top")
68 60 @ApiOperation(value = "获取左侧顶部信息")
... ...
... ... @@ -118,9 +118,9 @@ public class ThingsModelController extends BaseController {
118 118 @ApiOperation("修改物模型排序接口")
119 119 @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
120 120 public ResponseEntity<Boolean> updateSort(
121   - @RequestParam(value = "sortType: up向上,down向下,topUp置顶,bottomUp置底" ) String sortType,
  121 + @RequestParam(value = "sortType" ) String sortType,
122 122 @RequestParam(value = "id") String id,
123   - @RequestParam (value = "isCategory 是否品类") Boolean isCategory)
  123 + @RequestParam (value = "isCategory") Boolean isCategory)
124 124 throws ThingsboardException {
125 125 return ResponseEntity.ok(thingsModelService.updateSort(id,sortType,isCategory));
126 126 }
... ...
... ... @@ -74,7 +74,7 @@ public class TkAlarmInfoController extends BaseController {
74 74 customerId = getCurrentUser().getCustomerId().getId();
75 75 }
76 76 List<String> orgIds = null;
77   - if(getCurrentUser().isPtCommonTenant()){
  77 + if(getCurrentUser().isPtCommonTenant()||getCurrentUser().isOpenApiUser()){
78 78 orgIds = commonTenantOrganizationAllIds();
79 79 }
80 80 return alarmInfoService.alarmPage(
... ...
... ... @@ -263,8 +263,8 @@ public class TkDeviceController extends BaseController {
263 263 if (getCurrentUser().isCustomerUser()) {
264 264 queryMap.put("customerId", getCurrentUser().getCustomerId().getId());
265 265 }
266   - //如果当前用户是普通租户
267   - if (getCurrentUser().isPtCommonTenant()) {
  266 + //如果当前用户是普通租户或者openapi用戶
  267 + if (getCurrentUser().isPtCommonTenant()||getCurrentUser().isOpenApiUser()) {
268 268 List<String> organizationIds =commonTenantOrganizationAllIds();
269 269 if(null!=organizationIds&&organizationIds.size()>0){
270 270 queryMap.put("organizationIds", organizationIds);
... ...
... ... @@ -68,6 +68,7 @@ public class TkOrganizationController extends BaseController {
68 68 getCurrentUser().isPtTenantAdmin(),
69 69 getCurrentUser().isCustomerUser(),
70 70 getCurrentUser().isPtCommonTenant(),
  71 + getCurrentUser().isOpenApiUser(),
71 72 getCurrentUser().getCurrentTenantId(),
72 73 getCurrentUser().getCurrentUserId(),organizationId);
73 74 return ResponseEntity.ok(result);
... ...
... ... @@ -14,18 +14,17 @@ import org.thingsboard.server.common.data.StringUtils;
14 14 import org.thingsboard.server.common.data.exception.ThingsboardException;
15 15 import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
16 16 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
17   -import org.thingsboard.server.common.data.yunteng.dto.ApplicationDTO;
18   -import org.thingsboard.server.common.data.yunteng.dto.OpenApiContrlooerDTO;
19   -import org.thingsboard.server.common.data.yunteng.dto.OpenApiDTO;
20   -import org.thingsboard.server.common.data.yunteng.dto.UserDTO;
  17 +import org.thingsboard.server.common.data.yunteng.dto.*;
21 18 import org.thingsboard.server.common.data.yunteng.utils.i18n.MessageUtils;
22 19 import org.thingsboard.server.controller.BaseController;
23 20 import org.thingsboard.server.controller.yunteng.TkThirdPlatformController;
24 21 import org.thingsboard.server.controller.yunteng.TkUserController;
  22 +import org.thingsboard.server.dao.exception.DataValidationException;
25 23 import org.thingsboard.server.dao.yunteng.entities.TkOpenApiRecordEntity;
26 24 import org.thingsboard.server.dao.yunteng.service.ApplicationService;
27 25 import org.thingsboard.server.dao.yunteng.service.OpenApiRecordService;
28 26 import org.thingsboard.server.dao.yunteng.service.OpenApiService;
  27 +import org.thingsboard.server.dao.yunteng.service.TkOrganizationService;
29 28 import org.thingsboard.server.queue.util.TbCoreComponent;
30 29 import org.thingsboard.server.service.security.auth.yunteng.TkLoginResponse;
31 30 import org.thingsboard.server.utils.MiscUtils;
... ... @@ -34,6 +33,7 @@ import javax.servlet.http.HttpServletRequest;
34 33 import java.time.LocalDateTime;
35 34 import java.util.List;
36 35 import java.util.Map;
  36 +import java.util.stream.Collectors;
37 37
38 38 @Api(tags = "OpenApi接口")
39 39 @RestController
... ... @@ -49,6 +49,7 @@ public class OpenApiController extends BaseController {
49 49 private final RestTemplate restTemplate = new RestTemplate();
50 50 private final OpenApiService openApiService;
51 51 private final OpenApiRecordService openApiRecordService;
  52 + private final TkOrganizationService tKOrganizationService;
52 53
53 54
54 55 @GetMapping("/getToken")
... ... @@ -59,6 +60,8 @@ public class OpenApiController extends BaseController {
59 60 //如果第一次获取token则新建用户并且返回token
60 61 if(StringUtils.isEmpty(app.getUserId())){
61 62 UserDTO userDTO = new UserDTO().newOpenApiUser(app.getTenantId(),app.getKey());
  63 + List<String> OrgIdS= tKOrganizationService.organizationAllIds(app.getTenantId(),app.getOrganizationId());
  64 + userDTO.setOrganizationIds(OrgIdS.toArray(new String[0]));
62 65 tkUserController.saveTenant(userDTO,true);
63 66 userId =userDTO.getId();
64 67 app.setUserId(userId);
... ... @@ -84,8 +87,8 @@ public class OpenApiController extends BaseController {
84 87 ApplicationDTO appDto = applicationService.getDtoByUserId(getCurrentUser().getCurrentUserId());
85 88 //记录日志
86 89 setRecord(api,appDto,record);
87   - if (!appDto.getApiList().contains(api.getId())) {
88   - throw new TkDataValidationException(String.format(MessageUtils.message(ErrorMessage.
  90 + if (null==appDto.getApiList()||!appDto.getApiList().contains(api.getId())) {
  91 + throw new DataValidationException(String.format(MessageUtils.message(ErrorMessage.
89 92 NOT_HAVE_PERMISSION.getI18nCode())));
90 93 }
91 94 // 构建URL
... ...
... ... @@ -50,6 +50,7 @@ public class SecurityUser extends User {
50 50 @Getter @Setter private boolean ptTenantAdmin = false;
51 51 @Getter @Setter private boolean ptAdmin = false;
52 52 @Getter @Setter private boolean ptCommonTenant = false;
  53 + @Getter @Setter private boolean openApiUser = false;
53 54 @Getter @Setter private Set<String> roles;
54 55 @Getter @Setter private String platformUserName;
55 56
... ... @@ -87,9 +88,12 @@ public class SecurityUser extends User {
87 88 this.ptAdmin =
88 89 this.roles.stream()
89 90 .anyMatch(role -> role.equals(RoleEnum.PLATFORM_ADMIN.name()));
90   - this.ptCommonTenant =
  91 + this.ptCommonTenant =
91 92 this.roles.stream().anyMatch(role -> role.equals(RoleEnum.TENANT_ADMIN.name()))
92 93 &user.getUserDetailsDTO().getLevel()== FastIotConstants.MagicNumber.FOUR;
  94 + this.openApiUser =
  95 + this.roles.stream().anyMatch(role -> role.equals(RoleEnum.OPENAPI_USER.name()))
  96 + &user.getUserDetailsDTO().getLevel()== FastIotConstants.MagicNumber.FIVE;
93 97 return roleDTOS;
94 98 });
95 99 }
... ...
... ... @@ -66,6 +66,7 @@ public class JwtTokenFactory {
66 66 private static final String CURRENT_TENANT_ID = "currentTenantId";
67 67 private static final String PLATFORM_USER_NAME = "platformUserName";
68 68 private static final String IS_COMMON_TENANT = "isCommonTenant";
  69 + private static final String IS_OPENAPI_USER = "isOpenApiUser";
69 70
70 71 private final JwtSettingsService jwtSettingsService;
71 72
... ... @@ -86,6 +87,7 @@ public class JwtTokenFactory {
86 87 .claim(ENABLED, securityUser.isEnabled())
87 88 //thingskit
88 89 .claim(IS_COMMON_TENANT,securityUser.isPtCommonTenant())
  90 + .claim(IS_OPENAPI_USER,securityUser.isOpenApiUser())
89 91 .claim(CURRENT_USER_ID,securityUser.getCurrentUserId())
90 92 .claim(PLATFORM_USER_NAME,securityUser.getPlatformUserName())
91 93 .claim(ROLE,securityUser.getRoles())
... ... @@ -126,6 +128,7 @@ public class JwtTokenFactory {
126 128 securityUser.setPtTenantAdmin(securityUser.getRoles().stream().anyMatch(role -> role.equals(RoleEnum.TENANT_ADMIN.name()))&!isCommonTenant);
127 129 securityUser.setPtAdmin(securityUser.getRoles().stream().anyMatch(role -> role.equals(RoleEnum.PLATFORM_ADMIN.name())));
128 130 securityUser.setPtCommonTenant(isCommonTenant);
  131 + securityUser.setOpenApiUser(securityUser.getRoles().stream().anyMatch(role -> role.equals(RoleEnum.OPENAPI_USER.name())));
129 132 }
130 133 securityUser.setCurrentUserId(claims.get(CURRENT_USER_ID, String.class));
131 134 securityUser.setPlatformUserName(claims.get(PLATFORM_USER_NAME,String.class));
... ...
... ... @@ -7,11 +7,11 @@ import lombok.RequiredArgsConstructor;
7 7 import lombok.extern.slf4j.Slf4j;
8 8 import org.springframework.stereotype.Service;
9 9 import org.springframework.transaction.annotation.Transactional;
10   -import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
11 10 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
12 11 import org.thingsboard.server.common.data.yunteng.dto.ApplicationDTO;
13 12 import org.thingsboard.server.common.data.yunteng.utils.i18n.MessageUtils;
14 13 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  14 +import org.thingsboard.server.dao.exception.DataValidationException;
15 15 import org.thingsboard.server.dao.yunteng.entities.TkApplicationApiEntity;
16 16 import org.thingsboard.server.dao.yunteng.entities.TkApplicationEntity;
17 17 import org.thingsboard.server.dao.yunteng.entities.TkOrganizationEntity;
... ... @@ -131,7 +131,7 @@ public class ApplicationServiceImpl extends AbstractBaseService<ApplicationMappe
131 131 .eq(TkApplicationEntity::getKey, key)
132 132 .eq(TkApplicationEntity::getSecret,secret));
133 133 if(null == entity){
134   - throw new TkDataValidationException(String.format(MessageUtils.message(ErrorMessage.
  134 + throw new DataValidationException(String.format(MessageUtils.message(ErrorMessage.
135 135 OPENAPI_APP_ISNULL.getI18nCode())));
136 136 }
137 137 ApplicationDTO dto = new ApplicationDTO();
... ... @@ -145,7 +145,7 @@ public class ApplicationServiceImpl extends AbstractBaseService<ApplicationMappe
145 145 new LambdaQueryWrapper<TkApplicationEntity>()
146 146 .eq(TkApplicationEntity::getUserId, userId));
147 147 if(null == entity){
148   - throw new TkDataValidationException(String.format(MessageUtils.message(ErrorMessage.
  148 + throw new DataValidationException(String.format(MessageUtils.message(ErrorMessage.
149 149 OPENAPI_APP_ISNULL.getI18nCode())));
150 150 }
151 151 ApplicationDTO dto = new ApplicationDTO();
... ...
... ... @@ -7,15 +7,14 @@ import lombok.RequiredArgsConstructor;
7 7 import lombok.extern.slf4j.Slf4j;
8 8 import org.springframework.stereotype.Service;
9 9 import org.springframework.transaction.annotation.Transactional;
10   -import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
11 10 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
12   -import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO;
13 11 import org.thingsboard.server.common.data.yunteng.dto.OpenApiContrlooerDTO;
14 12 import org.thingsboard.server.common.data.yunteng.dto.OpenApiDTO;
15 13 import org.thingsboard.server.common.data.yunteng.dto.ApiMenuDTO;
16 14 import org.thingsboard.server.common.data.yunteng.utils.CopyUtils;
17 15 import org.thingsboard.server.common.data.yunteng.utils.i18n.MessageUtils;
18 16 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  17 +import org.thingsboard.server.dao.exception.DataValidationException;
19 18 import org.thingsboard.server.dao.yunteng.entities.TkOpenApiEntity;
20 19 import org.thingsboard.server.dao.yunteng.mapper.OpenApiMapper;
21 20 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
... ... @@ -35,7 +34,7 @@ public class OpenApiImpl extends AbstractBaseService<OpenApiMapper, TkOpenApiEnt
35 34 public OpenApiDTO getDto(String id) {
36 35 TkOpenApiEntity entity = baseMapper.selectById(id);
37 36 if(null == entity){
38   - throw new TkDataValidationException(String.format(MessageUtils.message(ErrorMessage.
  37 + throw new DataValidationException(String.format(MessageUtils.message(ErrorMessage.
39 38 OPENAPI_API_ISNULL.getI18nCode())));
40 39 }
41 40 OpenApiDTO dto = new OpenApiDTO();
... ... @@ -82,7 +81,7 @@ public class OpenApiImpl extends AbstractBaseService<OpenApiMapper, TkOpenApiEnt
82 81 .in(TkOpenApiEntity::getId,apiIds));
83 82 list.stream().forEach(entity ->{
84 83 if(!entity.getTenantId().equals(tenantId)){
85   - throw new TkDataValidationException(String.format(MessageUtils.message(ErrorMessage.
  84 + throw new DataValidationException(String.format(MessageUtils.message(ErrorMessage.
86 85 NOT_HAVE_PERMISSION.getI18nCode())));
87 86 }
88 87 });
... ... @@ -94,7 +93,7 @@ public class OpenApiImpl extends AbstractBaseService<OpenApiMapper, TkOpenApiEnt
94 93 public OpenApiDTO update(OpenApiDTO dto, String tenantId) {
95 94 TkOpenApiEntity openApi = baseMapper.selectById(dto.getId());
96 95 if(!openApi.getTenantId().equals(tenantId)){
97   - throw new TkDataValidationException(String.format(MessageUtils.message(ErrorMessage.
  96 + throw new DataValidationException(String.format(MessageUtils.message(ErrorMessage.
98 97 NOT_HAVE_PERMISSION.getI18nCode())));
99 98 }
100 99 dto.copyToEntity(openApi);
... ...
... ... @@ -185,11 +185,12 @@ public class TkHomePageServiceImpl implements HomePageService {
185 185 }
186 186
187 187 @Override
188   - public HomeDeviceInfoDTO getOpenApiDeviceInfo(boolean isPtSysAdmin, boolean isPtAdmin, boolean isTenantAdmin,
189   - boolean isPtCommonTenant, String tenantId, String currentUserId, String customerId){
  188 + public HomeDeviceInfoDTO getOpenApiDeviceInfo( String tenantId, String currentUserId){
190 189 long zero = FastIotConstants.MagicNumber.ZERO;
191 190 HomeDeviceInfoDTO homeDeviceInfo = new HomeDeviceInfoDTO(zero);
192 191 Map<String, Object> queryMap = new HashMap<>();
  192 + List<String> orgIds = sysUserOrganizationMappingServiceImpl.getOrganizationIdsByUserId(currentUserId);
  193 + queryMap.put("organizationIds",orgIds);
193 194 queryMap.put("tenantId", UUID.fromString(tenantId));
194 195 List<TkDeviceEntity> deviceList = deviceMapper.findDevices(queryMap);
195 196 if (null != deviceList) {
... ... @@ -199,17 +200,20 @@ public class TkHomePageServiceImpl implements HomePageService {
199 200 }
200 201
201 202 @Override
202   - public BaseHomePageTop getOpenApiAlarmInfo(boolean isPtSysAdmin, boolean isPtAdmin, boolean isTenantAdmin,
203   - boolean isPtCommonTenant, String tenantId, String currentUserId,
204   - String customerId) throws ExecutionException, InterruptedException {
205   - Map<String, Object> queryMap = new HashMap<>();
206   - queryMap.put("tenantId", UUID.fromString(tenantId));
  203 + public BaseHomePageTop getOpenApiAlarmInfo( String tenantId, String currentUserId) throws ExecutionException, InterruptedException {
  204 + List<BaseHomePageTop> alarmList;
207 205 long zero = FastIotConstants.MagicNumber.ZERO;
208   - TenantId currentTenantId = TenantId.fromUUID(UUID.fromString(tenantId));
209   - HomePageTopMessage messageInfo = new HomePageTopMessage(zero);
210 206 BaseHomePageTop alarm = new BaseHomePageTop(zero);
211   - ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(currentTenantId);
212   - setAllAlarmAndMessageInfo(currentTenantId, apiUsageState.getId(), messageInfo, alarm);
  207 + List<String> orgIds = sysUserOrganizationMappingServiceImpl.getOrganizationIdsByUserId(currentUserId);
  208 + LocalDateTime todayBegin = LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN);
  209 + long startTs = todayBegin.toInstant(ZoneOffset.of("+8")).toEpochMilli();
  210 + alarmList = deviceMapper.findDeviceAlarmInfoByCustomer(startTs, null,orgIds);
  211 + if (alarmList.size() > zero) {
  212 + BaseHomePageTop baseHomePageTop = alarmList.get(0);
  213 + alarm.setSumCount(baseHomePageTop.getSumCount());
  214 + alarm.setTodayAdd(
  215 + baseHomePageTop.getTodayAdd() == null ? zero : baseHomePageTop.getTodayAdd());
  216 + }
213 217 return alarm;
214 218
215 219 }
... ...
... ... @@ -73,7 +73,7 @@ public class TkOrganizationServiceImpl extends AbstractBaseService<OrganizationM
73 73 if (isCustomerOrPlatform) {
74 74 if (StringUtils.isEmpty(parentId)) {
75 75 // 获取当前用户的最顶级组织ID的父ID
76   - List<OrganizationDTO> myOrganizations = getMyOrganizations(false, false, false,false,tenantId, userId,null);
  76 + List<OrganizationDTO> myOrganizations = getMyOrganizations(false, false, false,false,false,tenantId, userId,null);
77 77 if (null != myOrganizations && myOrganizations.size() > 0) {
78 78 OrganizationDTO organizationDto = myOrganizations.get(0);
79 79 organization.setParentId(organizationDto.getParentId());
... ... @@ -291,14 +291,14 @@ public class TkOrganizationServiceImpl extends AbstractBaseService<OrganizationM
291 291
292 292 @Override
293 293 public List<OrganizationDTO> getMyOrganizations(
294   - boolean isPtSysAdmin, boolean isPtTenantAdmin,boolean isCustomer, boolean isPtCommonTenant, String tenantId, String currentUserId,String organizationId) {
  294 + boolean isPtSysAdmin, boolean isPtTenantAdmin,boolean isCustomer, boolean isPtCommonTenant,boolean isOpenApiUser, String tenantId, String currentUserId,String organizationId) {
295 295 //如果传入上级组织id直接查询该组织及以下
296 296 if(null != organizationId){
297 297 List<String> organizationIds = StringUtils.isEmpty(organizationId)?null:List.of(organizationId);
298 298 return findOrganizationTree(tenantId,organizationIds);
299 299 }
300 300 // 如果是租户管理员,则返回该租户id下的所有组织
301   - if (isPtTenantAdmin || isPtSysAdmin || (!isCustomer && !isPtCommonTenant)) {
  301 + if (isPtTenantAdmin || isPtSysAdmin || (!isCustomer && !isPtCommonTenant&&!isOpenApiUser)) {
302 302 return findOrganizationTree(tenantId,null);
303 303 } else {
304 304 // 返回当前用户组织id集
... ...
... ... @@ -37,23 +37,13 @@ public interface HomePageService {
37 37 throws ExecutionException, InterruptedException;
38 38
39 39 HomeDeviceInfoDTO getOpenApiDeviceInfo(
40   - boolean isPtSysAdmin,
41   - boolean isPtAdmin,
42   - boolean isTenantAdmin,
43   - boolean isPtCommonTenant,
44 40 String tenantId,
45   - String currentUserId,
46   - String customerId)
  41 + String currentUserId)
47 42 throws ExecutionException, InterruptedException;
48 43
49 44 BaseHomePageTop getOpenApiAlarmInfo(
50   - boolean isPtSysAdmin,
51   - boolean isPtAdmin,
52   - boolean isTenantAdmin,
53   - boolean isPtCommonTenant,
54 45 String tenantId,
55   - String currentUserId,
56   - String customerId)
  46 + String currentUserId)
57 47 throws ExecutionException, InterruptedException;
58 48
59 49 /**
... ...
... ... @@ -14,7 +14,7 @@ public interface TkOrganizationService extends BaseService<TkOrganizationEntity>
14 14 boolean deleteOrganizations(DeleteDTO deleteDTO,String tenantId);
15 15
16 16 List<OrganizationDTO> getMyOrganizations(
17   - boolean isPtSysAdmin,boolean isPtTenantAdmin,boolean isCustomer, boolean isPtCommonTenant,String tenantId, String currentUserId,String organizationId);
  17 + boolean isPtSysAdmin,boolean isPtTenantAdmin,boolean isCustomer, boolean isPtCommonTenant,boolean isOpenApiUser,String tenantId, String currentUserId,String organizationId);
18 18
19 19 OrganizationDTO updateOrganization(OrganizationDTO organizationDTO, String tenantId,boolean isCustomerOrPlatform,String userId);
20 20
... ...