Files
compute-engine/service/authz/seed.go
T
Pine 28e53d90fc feat: 算力引擎 Go 后端核心(new-api)
- 统一 OpenAI 兼容 /v1 中继 + 渠道/额度/令牌/流水
- 各领域包:relay 模型网关、model 数据层、controller 管理 API
2026-08-23 22:38:46 +08:00

63 lines
1.4 KiB
Go

package authz
import (
"fmt"
"github.com/QuantumNous/new-api/model"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
func seedBuiltInRoles(db *gorm.DB) error {
for _, spec := range builtInRoles {
role := model.AuthzRole{
Key: spec.Key,
Name: spec.Name,
Description: spec.Description,
BuiltIn: spec.BuiltIn,
Enabled: true,
Sort: spec.Sort,
}
if err := db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "key"}},
DoUpdates: clause.AssignmentColumns([]string{
"name",
"description",
"built_in",
"enabled",
"sort",
}),
}).Create(&role).Error; err != nil {
return err
}
}
return nil
}
func resetBuiltInRolePolicies(db *gorm.DB) error {
subjects := make([]string, 0, len(builtInRoles))
for _, spec := range builtInRoles {
subjects = append(subjects, RoleSubject(spec.Key))
}
return db.Where("ptype = ? AND v0 IN ?", "p", subjects).Delete(&model.CasbinRule{}).Error
}
func seedDefaultPolicies() error {
e := currentEnforcer()
if e == nil {
return fmt.Errorf("authz enforcer is not initialized")
}
for _, spec := range builtInRoles {
if spec.Superuser {
continue
}
for _, permission := range PermissionsForRole(spec.Key) {
if _, err := e.AddPolicy(RoleSubject(spec.Key), permission.Resource, permission.Action, EffectAllow); err != nil {
return err
}
}
}
return nil
}