package jnpf.limsService.provider;
|
|
import cn.dev33.satoken.stp.StpUtil;
|
import jnpf.base.UserInfo;
|
import jnpf.limsService.LimsTestWorkItemSnapshotService;
|
import jnpf.util.UserProvider;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.core.env.Environment;
|
|
import javax.sql.DataSource;
|
import java.util.function.Supplier;
|
|
/** No configuration-table access or read-pool initialization during application startup. */
|
@Configuration(proxyBeanMethods = false)
|
public class LimsElnSourceConfiguration {
|
@Bean
|
public LimsElnReadonlyPool limsElnReadonlyPool(Environment environment, DataSource dataSource) {
|
return new LimsElnReadonlyPool(environment, dataSource);
|
}
|
|
@Bean
|
public Supplier<LimsElnSourceCatalog.Actor> limsElnSourceActors() {
|
return () -> {
|
UserInfo user = UserProvider.getUser();
|
if (user == null || user.getUserId() == null || user.getUserId().trim().isEmpty()) {
|
throw new LimsElnReadonlyResolver.SourceFailure("SOURCE_FORBIDDEN", "Authenticated source caller required");
|
}
|
String tenant = user.getTenantId();
|
if (tenant != null && !tenant.trim().isEmpty() && !"0".equals(tenant.trim())) {
|
throw new LimsElnReadonlyResolver.SourceFailure("SOURCE_FORBIDDEN", "Invalid tenant context");
|
}
|
return new LimsElnSourceCatalog.Actor("0", user.getUserId(),
|
Boolean.TRUE.equals(user.getIsAdministrator())
|
|| StpUtil.hasPermission("dianziJiluGonggongZiduanGuanli"));
|
};
|
}
|
|
@Bean
|
public LimsElnSourceMetadata limsElnSourceMetadata(DataSource dataSource, LimsElnReadonlyPool pool,
|
Supplier<LimsElnSourceCatalog.Actor> limsElnSourceActors) {
|
return new LimsElnSourceMetadata(dataSource, pool.dataSource(), limsElnSourceActors);
|
}
|
|
@Bean
|
public LimsElnDatasetCatalog limsElnDatasetCatalog(DataSource dataSource, LimsElnReadonlyPool pool,
|
LimsElnSourceMetadata metadata, LimsTestWorkItemSnapshotService tasks,
|
Supplier<LimsElnSourceCatalog.Actor> limsElnSourceActors) {
|
return new LimsElnDatasetCatalog(dataSource, pool.dataSource(), metadata, tasks, limsElnSourceActors);
|
}
|
|
@Bean
|
public LimsElnSourceCatalog limsElnSourceCatalog(DataSource dataSource, LimsElnDatasetCatalog datasets,
|
Supplier<LimsElnSourceCatalog.Actor> limsElnSourceActors) {
|
return new LimsElnSourceCatalog(new JdbcLimsElnSourceStore(dataSource), limsElnSourceActors, datasets);
|
}
|
|
@Bean
|
public LimsElnDataItemManager limsElnDataItemManager(LimsElnSourceCatalog properties,
|
LimsElnDatasetCatalog paths, LimsElnSourceMetadata metadata) {
|
return new LimsElnDataItemManager(properties, paths, metadata);
|
}
|
|
@Bean
|
public LimsElnPreviewSampleCatalog limsElnPreviewSampleCatalog(LimsElnReadonlyPool pool,
|
Supplier<LimsElnSourceCatalog.Actor> limsElnSourceActors) {
|
return new LimsElnPreviewSampleCatalog(pool.dataSource(), limsElnSourceActors);
|
}
|
|
@Bean
|
public LimsElnReadonlyResolver limsElnReadonlyResolver(LimsElnSourceCatalog catalog, LimsElnReadonlyPool pool,
|
LimsTestWorkItemSnapshotService tasks, Supplier<LimsElnSourceCatalog.Actor> limsElnSourceActors) {
|
return new LimsElnReadonlyResolver(catalog, pool.dataSource(), tasks, limsElnSourceActors);
|
}
|
}
|