Bladeren bron

fix(rbac): casbin gormAdapter 表名 rule_rows → casbin_rule(S1 遗留)

GORM 会把 ruleRow 复数化为 rule_rows,而目标态 DDL 表名是 casbin_rule:
不显式 TableName 时 LoadPolicy 读不存在的表(NewEnforcer 直接报 no such table),
AddPolicy/SavePolicy 也会写到错误的表 —— 策略永远加载不到、写入丢失。
S1 单测只覆盖内存 Enforcer(DB 路径留给 S3),故未暴露;AC-14 种子落地时首次真库跑通发现。
Q 11 uur geleden
bovenliggende
commit
f20ccae732
1 gewijzigde bestanden met toevoegingen van 6 en 0 verwijderingen
  1. 6 0
      internal/infra/rbac/enforcer.go

+ 6 - 0
internal/infra/rbac/enforcer.go

@@ -47,6 +47,12 @@ type ruleRow struct {
 	V3    string `gorm:"column:v3"`
 }
 
+// TableName 锁定表名(**必须显式**:GORM 会把 `ruleRow` 复数化为 `rule_rows`,
+// 而目标态 DDL 表名是 `casbin_rule`——不写这一行,LoadPolicy 会去读一张不存在的表
+// `rule_rows`,NewEnforcer 直接报 "no such table",策略永远加载不到;
+// AddPolicy/SavePolicy 同理会写到错误的表。AC-14 接线时首次真库/文件库跑通暴露,属 S1 遗留缺陷)。
+func (ruleRow) TableName() string { return "casbin_rule" }
+
 // 编译期断言:gormAdapter 须满足 casbin persist.Adapter(签名漂移即编译失败)。
 var _ persist.Adapter = (*gormAdapter)(nil)