Skip to content

Commit

Permalink
avoid DB operate in for iteration
Browse files Browse the repository at this point in the history
  • Loading branch information
yiminpeng committed Jul 10, 2024
1 parent fbda4f1 commit d11f3cb
Showing 1 changed file with 42 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;

import javax.validation.constraints.NotEmpty;

Expand Down Expand Up @@ -129,35 +130,54 @@ public void bindUserAndConnectionAccessPermission(@NonNull Long userId, Long con
public void bindUserAndDataSourcePermission(@NonNull Long userId, @NonNull Long organizationId,
@NonNull Long dataSourceId, @NotEmpty List<String> actions) {
actions.stream().filter(action -> StringUtils.notEquals(action, "create")).distinct().forEach(action -> {
getPermission(userId, organizationId, "ODC_CONNECTION:" + dataSourceId, action);
PermissionEntity permission = new PermissionEntity();
permission.setAction(action);
permission.setType(PermissionType.PUBLIC_RESOURCE);
permission.setResourceIdentifier("ODC_CONNECTION:" + dataSourceId);
permission.setOrganizationId(organizationId);
permission.setCreatorId(userId);
permission.setBuiltIn(false);
permission.setExpireTime(TimeUtils.getMySQLMaxDatetime());
permission.setAuthorizationType(AuthorizationType.USER_AUTHORIZATION);
PermissionEntity saved = permissionRepository.saveAndFlush(permission);

UserPermissionEntity userPermission = new UserPermissionEntity();
userPermission.setUserId(userId);
userPermission.setPermissionId(saved.getId());
userPermission.setCreatorId(userId);
userPermission.setOrganizationId(organizationId);
userPermissionRepository.saveAndFlush(userPermission);
});
}

@SkipAuthorize("internal usage")
@Transactional(rollbackFor = Exception.class)
public void bindUserAndDataSourceAllPermission(@NonNull Long userId, @NonNull Long organizationId) {
List<String> actionList = Arrays.asList("create", "read", "update", "delete");
actionList.forEach(action -> getPermission(userId, organizationId, "ODC_CONNECTION:*", action));
}

private void getPermission(Long userId, Long organizationId, String permissionRange, String action) {
PermissionEntity permission = new PermissionEntity();
permission.setAction(action);
permission.setType(PermissionType.PUBLIC_RESOURCE);
permission.setResourceIdentifier(permissionRange);
permission.setOrganizationId(organizationId);
permission.setCreatorId(userId);
permission.setBuiltIn(true);
permission.setExpireTime(TimeUtils.getMySQLMaxDatetime());
permission.setAuthorizationType(AuthorizationType.USER_AUTHORIZATION);
PermissionEntity saved = permissionRepository.saveAndFlush(permission);

UserPermissionEntity userPermission = new UserPermissionEntity();
userPermission.setUserId(userId);
userPermission.setPermissionId(saved.getId());
userPermission.setCreatorId(userId);
userPermission.setOrganizationId(organizationId);
userPermissionRepository.saveAndFlush(userPermission);
List<PermissionEntity> permissionList = actionList.stream()
.map(action -> {
PermissionEntity permission = new PermissionEntity();
permission.setAction(action);
permission.setType(PermissionType.PUBLIC_RESOURCE);
permission.setResourceIdentifier("ODC_CONNECTION:*");
permission.setOrganizationId(organizationId);
permission.setCreatorId(userId);
permission.setBuiltIn(true);
permission.setExpireTime(TimeUtils.getMySQLMaxDatetime());
permission.setAuthorizationType(AuthorizationType.USER_AUTHORIZATION);
return permission;
}).collect(Collectors.toList());
permissionRepository.saveAllAndFlush(permissionList);
List<UserPermissionEntity> userPermissionList = permissionList.stream()
.map(permission -> {
UserPermissionEntity userPermission = new UserPermissionEntity();
userPermission.setUserId(userId);
userPermission.setPermissionId(permission.getId());
userPermission.setCreatorId(userId);
userPermission.setOrganizationId(organizationId);
return userPermission;
}).collect(Collectors.toList());
userPermissionRepository.saveAllAndFlush(userPermissionList);
}

}

0 comments on commit d11f3cb

Please sign in to comment.