# BusinessInfoRegistry 注册中心

---
DDS-Section: 8. 权限模型 - 8.3 BusinessInfoRegistry
DDS-Lines: L604-L664
---

## 设计目的

权限模块需要查询业务模块信息（如项目填写人），但不应直接依赖具体业务模块。采用统一注册机制解决模块依赖。

## 注册接口定义

```go
// BusinessInfoQuerier 业务信息查询接口（通用基类）
type BusinessInfoQuerier interface {
    GetModuleCode() string
}

// ProjectInfoQuerier 项目信息查询接口
type ProjectInfoQuerier interface {
    BusinessInfoQuerier
    GetProjectFillerID(ctx context.Context, projectID string) (int64, error)
}

// JenkinsInfoQuerier Jenkins 信息查询接口
type JenkinsInfoQuerier interface {
    BusinessInfoQuerier
    GetOrganizations(ctx context.Context) ([]string, error)
    GetRepositories(ctx context.Context, org string) ([]string, error)
    GetBranches(ctx context.Context, org, repo string) ([]string, error)
}
```

## 统一权限检查接口

```go
// ModulePermissionChecker 权限检查器接口（通用）
type ModulePermissionChecker interface {
    CheckPermission(ctx context.Context, userID int64, userRole string,
        resourceID, resourceType, permissionType string) (bool, error)
    GetAccessibleResourceIDs(ctx context.Context, userID int64, userRole string,
        resourceType string) ([]string, error)
}
```

## 注册流程

在 `rmdc-core` 初始化阶段完成注册：

```go
// 1. 创建注册中心
registry := permission.NewBusinessInfoRegistry()

// 2. 注册项目信息查询器
registry.RegisterProjectQuerier(projectService)

// 3. 注册 Jenkins 信息查询器
registry.RegisterJenkinsQuerier(jenkinsService)

// 4. 将注册中心注入权限服务
projectPermissionService.SetBusinessInfoRegistry(registry)
jenkinsPermissionService.SetBusinessInfoRegistry(registry)

// 5. 将权限检查器注入业务模块
projectService.SetPermissionChecker(projectPermissionService)
```

## 依赖关系

```
rmdc-core (初始化)
    │
    ├── 注册 ProjectInfoQuerier ────────→ BusinessInfoRegistry
    ├── 注册 JenkinsInfoQuerier ────────→ BusinessInfoRegistry
    │
    ├── 注入 BusinessInfoRegistry ──────→ ProjectPermissionService
    ├── 注入 BusinessInfoRegistry ──────→ JenkinsPermissionService
    │
    └── 注入 PermissionChecker ─────────→ rmdc-project-management
```
