feat: 方案100%匹配 — RBAC动态权限+Grafana监控+目录库独立微服务+全国目录中心+标识同步

This commit is contained in:
selfrelease
2026-06-30 13:42:11 +08:00
parent 96e2393c50
commit 29a6b57533
40 changed files with 4159 additions and 7 deletions
+51
View File
@@ -131,6 +131,47 @@ func (p *PersistentChain) SetContentStatus(maCode, status string) error {
return nil
}
// MergeMA 合并 MA 码:内存合并成功后写穿 PG 镜像。
func (p *PersistentChain) MergeMA(role Role, req model.MergeRequest) (model.MergeResult, error) {
res, err := p.MemoryChain.MergeMA(role, req)
if err != nil {
return res, err
}
// 被合并的 MA 码状态标记为 merged
for _, secMA := range req.SecondaryMACodes {
p.updateStatus(secMA, model.StatusMerged)
}
// 主 MA 码的绑定和映射已在内存中追加,写穿最新状态
for _, b := range p.snapshotBindings(req.PrimaryMACode) {
p.persistBinding(b)
}
p.persistTx(req.PrimaryMACode, res.TxID, "mergeMA")
return res, nil
}
// SplitMA 拆分 MA 码:内存拆分成功后写穿 PG 镜像。
func (p *PersistentChain) SplitMA(role Role, req model.SplitRequest) (model.SplitResult, error) {
res, err := p.MemoryChain.SplitMA(role, req)
if err != nil {
return res, err
}
// 源 MA 码状态标记为 split
p.updateStatus(req.SourceMACode, model.StatusSplit)
// 新 MA 码的内容记录和绑定写穿
for _, newMA := range res.NewMACodes {
c, _ := p.MemoryChain.QueryContent(newMA)
p.persistContent(c)
for _, b := range p.snapshotBindings(newMA) {
p.persistBinding(b)
}
for _, mp := range p.snapshotMappings(newMA) {
p.persistMapping(mp)
}
}
p.persistTx(req.SourceMACode, res.TxID, "splitMA")
return res, nil
}
// ---- PG 写入小工具(best-effort,失败仅记日志)----
func (p *PersistentChain) exec(q string, args ...any) {
@@ -194,6 +235,16 @@ func (p *PersistentChain) snapshotBindings(maCode string) []model.HashBinding {
return out
}
// snapshotMappings 复制某 MA 码当前的内存映射(同包访问,读锁保护)。
func (p *PersistentChain) snapshotMappings(maCode string) []model.Mapping {
p.mu.RLock()
defer p.mu.RUnlock()
src := p.mappings[maCode]
out := make([]model.Mapping, len(src))
copy(out, src)
return out
}
// ---- 启动水合:从 PG 镜像恢复内存状态 ----
func (p *PersistentChain) hydrate() error {