fix: 设计原则审查修复 — DIP/ISP, LoD, DRY, OCP, URL, 301缓存

- P0 DIP+ISP: 全链路注入接口,消除零接口紧耦合
- P0 URL: auth 301→302,修复登出后浏览器缓存陷阱
- P1 DRY: JWT 认证逻辑收敛至 TokenService+中间件
- P2 DRY: 前后端角色/状态映射统一为 model 常量
- P2 LoD: 新增 SettingsController,router 不再跨层调 repo
- P2 URL: settings ?tab= → /settings/:tab 伪静态
- P3 OCP: 角色权限 map 化,告别硬编码 switch
This commit is contained in:
2026-05-26 21:12:19 +08:00
parent 483fdd919f
commit 39d13993ba
37 changed files with 961 additions and 260 deletions

View File

@ -3,17 +3,16 @@ package service
import (
"metazone.cc/metalab/internal/common"
"metazone.cc/metalab/internal/model"
"metazone.cc/metalab/internal/repository"
)
// AdminService 管理后台业务逻辑
// 集中处理所有权限边界检查,避免胖控制器
type AdminService struct {
userRepo *repository.UserRepo
userRepo userAdminStore
}
// NewAdminService 构造函数
func NewAdminService(userRepo *repository.UserRepo) *AdminService {
func NewAdminService(userRepo userAdminStore) *AdminService {
return &AdminService{userRepo: userRepo}
}
@ -132,8 +131,8 @@ func (s *AdminService) checkAndOperate(operatorUID, targetUID uint, operate func
return common.ErrUserNotFound
}
// 4. Admin 只能操作 user 角色
if operator.Role == model.RoleAdmin && target.Role != model.RoleUser {
// 4. 权限检查:操作者是否有权限操作目标角色
if !model.CanOperateRole(operator.Role, target.Role) {
return common.ErrPermissionDenied
}