刘光辉
6 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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);
    }
}