删除服务端材质渲染功能及system_config表,转为环境变量配置,初步配置管理员功能
This commit is contained in:
@@ -306,11 +306,6 @@ func (b *CacheKeyBuilder) TextureList(userID int64, page int) string {
|
||||
return fmt.Sprintf("%stexture:user:%d:page:%d", b.prefix, userID, page)
|
||||
}
|
||||
|
||||
// TextureRender 构建材质渲染缓存键
|
||||
func (b *CacheKeyBuilder) TextureRender(textureID int64, renderType string, size int) string {
|
||||
return fmt.Sprintf("%stexture:render:%d:%s:%d", b.prefix, textureID, renderType, size)
|
||||
}
|
||||
|
||||
// Token 构建令牌缓存键
|
||||
func (b *CacheKeyBuilder) Token(accessToken string) string {
|
||||
return fmt.Sprintf("%stoken:%s", b.prefix, accessToken)
|
||||
|
||||
@@ -81,9 +81,6 @@ func AutoMigrate(logger *zap.Logger) error {
|
||||
// Yggdrasil相关表(在User之后创建,因为它引用User)
|
||||
&model.Yggdrasil{},
|
||||
|
||||
// 系统配置表
|
||||
&model.SystemConfig{},
|
||||
|
||||
// 审计日志表
|
||||
&model.AuditLog{},
|
||||
|
||||
|
||||
@@ -12,36 +12,41 @@ import (
|
||||
const (
|
||||
defaultAdminUsername = "admin"
|
||||
defaultAdminEmail = "admin@example.com"
|
||||
defaultAdminPassword = "admin123456" // 首次登录后请立即修改
|
||||
defaultAdminPassword = "admin123456" // 首次登录后请立即修改,部署到生产环境后删除
|
||||
)
|
||||
|
||||
// defaultSystemConfigs 默认系统配置
|
||||
var defaultSystemConfigs = []model.SystemConfig{
|
||||
{Key: "site_name", Value: "CarrotSkin", Description: "网站名称", Type: model.ConfigTypeString, IsPublic: true},
|
||||
{Key: "site_description", Value: "一个优秀的Minecraft皮肤站", Description: "网站描述", Type: model.ConfigTypeString, IsPublic: true},
|
||||
{Key: "registration_enabled", Value: "true", Description: "是否允许用户注册", Type: model.ConfigTypeBoolean, IsPublic: true},
|
||||
{Key: "checkin_reward", Value: "10", Description: "签到奖励积分", Type: model.ConfigTypeInteger, IsPublic: true},
|
||||
{Key: "texture_download_reward", Value: "1", Description: "材质被下载奖励积分", Type: model.ConfigTypeInteger, IsPublic: false},
|
||||
{Key: "max_textures_per_user", Value: "50", Description: "每个用户最大材质数量", Type: model.ConfigTypeInteger, IsPublic: false},
|
||||
{Key: "max_profiles_per_user", Value: "5", Description: "每个用户最大角色数量", Type: model.ConfigTypeInteger, IsPublic: false},
|
||||
{Key: "default_avatar", Value: "", Description: "默认头像URL", Type: model.ConfigTypeString, IsPublic: true},
|
||||
}
|
||||
|
||||
// defaultCasbinRules 默认Casbin权限规则
|
||||
// 规则格式: {PType: "p", V0: "角色", V1: "资源", V2: "操作"}
|
||||
// PType "p" 表示策略规则,"g" 表示角色继承
|
||||
var defaultCasbinRules = []model.CasbinRule{
|
||||
// 管理员拥有所有权限
|
||||
// ==================== 管理员权限 ====================
|
||||
// 管理员拥有所有权限(通配符)
|
||||
{PType: "p", V0: "admin", V1: "*", V2: "*"},
|
||||
// 普通用户权限
|
||||
{PType: "p", V0: "user", V1: "texture", V2: "create"},
|
||||
{PType: "p", V0: "user", V1: "texture", V2: "read"},
|
||||
{PType: "p", V0: "user", V1: "texture", V2: "update_own"},
|
||||
{PType: "p", V0: "user", V1: "texture", V2: "delete_own"},
|
||||
{PType: "p", V0: "user", V1: "profile", V2: "create"},
|
||||
{PType: "p", V0: "user", V1: "profile", V2: "read"},
|
||||
{PType: "p", V0: "user", V1: "profile", V2: "update_own"},
|
||||
{PType: "p", V0: "user", V1: "profile", V2: "delete_own"},
|
||||
{PType: "p", V0: "user", V1: "user", V2: "update_own"},
|
||||
// 角色继承:admin 继承 user 的所有权限
|
||||
|
||||
// ==================== 普通用户权限 ====================
|
||||
// --- 用户资源 (user) ---
|
||||
{PType: "p", V0: "user", V1: "user", V2: "read_own"}, // 查看自己的信息
|
||||
{PType: "p", V0: "user", V1: "user", V2: "update_own"}, // 更新自己的信息
|
||||
|
||||
// --- 材质资源 (texture) ---
|
||||
{PType: "p", V0: "user", V1: "texture", V2: "read"}, // 查看材质(公开)
|
||||
{PType: "p", V0: "user", V1: "texture", V2: "create"}, // 上传材质
|
||||
{PType: "p", V0: "user", V1: "texture", V2: "update_own"}, // 更新自己的材质
|
||||
{PType: "p", V0: "user", V1: "texture", V2: "delete_own"}, // 删除自己的材质
|
||||
{PType: "p", V0: "user", V1: "texture", V2: "favorite"}, // 收藏材质
|
||||
|
||||
// --- 档案资源 (profile) ---
|
||||
{PType: "p", V0: "user", V1: "profile", V2: "read"}, // 查看档案(公开)
|
||||
{PType: "p", V0: "user", V1: "profile", V2: "create"}, // 创建档案
|
||||
{PType: "p", V0: "user", V1: "profile", V2: "update_own"}, // 更新自己的档案
|
||||
{PType: "p", V0: "user", V1: "profile", V2: "delete_own"}, // 删除自己的档案
|
||||
|
||||
// --- Yggdrasil资源 (yggdrasil) ---
|
||||
{PType: "p", V0: "user", V1: "yggdrasil", V2: "auth"}, // Yggdrasil认证
|
||||
{PType: "p", V0: "user", V1: "yggdrasil", V2: "reset_password"}, // 重置Yggdrasil密码
|
||||
|
||||
// ==================== 角色继承 ====================
|
||||
// admin 继承 user 的所有权限
|
||||
{PType: "g", V0: "admin", V1: "user"},
|
||||
}
|
||||
|
||||
@@ -59,11 +64,6 @@ func Seed(logger *zap.Logger) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// 初始化系统配置
|
||||
if err := seedSystemConfigs(db, logger); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 初始化Casbin权限规则
|
||||
if err := seedCasbinRules(db, logger); err != nil {
|
||||
return err
|
||||
@@ -119,23 +119,6 @@ func seedAdminUser(db *gorm.DB, logger *zap.Logger) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// seedSystemConfigs 初始化系统配置
|
||||
func seedSystemConfigs(db *gorm.DB, logger *zap.Logger) error {
|
||||
for _, config := range defaultSystemConfigs {
|
||||
// 使用 FirstOrCreate 避免重复插入
|
||||
var existing model.SystemConfig
|
||||
result := db.Where("key = ?", config.Key).First(&existing)
|
||||
if result.Error == gorm.ErrRecordNotFound {
|
||||
if err := db.Create(&config).Error; err != nil {
|
||||
logger.Error("创建系统配置失败", zap.String("key", config.Key), zap.Error(err))
|
||||
return err
|
||||
}
|
||||
logger.Info("创建系统配置", zap.String("key", config.Key))
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// seedCasbinRules 初始化Casbin权限规则
|
||||
func seedCasbinRules(db *gorm.DB, logger *zap.Logger) error {
|
||||
for _, rule := range defaultCasbinRules {
|
||||
@@ -153,4 +136,3 @@ func seedCasbinRules(db *gorm.DB, logger *zap.Logger) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user