// Package middle/middle_service.go package middle import ( "Quincy_admin/schemas" "fmt" "github.com/jmoiron/sqlx" ) type MService struct { db *sqlx.DB } func NewMiddleService(db *sqlx.DB) *MService { return &MService{db: db} } // GetUserID 验证令牌并返回用户信息 //func (s *MService) GetUserID(scode string) (*schemas.UserInfo, error) { // // 从Redis获取用户信息 // InitRedis := utils.GetRedis() // ctx := utils.GetContext() // // // 尝试从Redis获取用户会话信息 // userInfoStr, err := InitRedis.Get(ctx, scode).Result() // if err != nil { // // Redis中未找到会话信息,视为登录过期 // return nil, fmt.Errorf("登录已过期") // } // // // 解析Redis中的用户信息 // var user schemas.UserInfo // err = json.Unmarshal([]byte(userInfoStr), &user) // if err != nil { // return nil, fmt.Errorf("会话信息解析失败") // } // // return &user, nil //} // GetUserID 验证令牌并返回用户ID func (s *MService) GetUserID(scode string) (*schemas.UserInfo, error) { // 实现令牌验证逻辑 query := ` SELECT tb1.id, COALESCE(tb2.role_id, 0) AS rolecode, tb1.sessioncode, tb1.username, tb1.password, tb1.nickname, tb1.email, tb1.avatar, tb1.status, tb1.register_time, tb1.last_login_time FROM admin_user tb1 JOIN admin_user_role tb2 ON tb1.id = tb2.user_id WHERE sessioncode = ? ORDER BY tb1.id LIMIT 1; ` user := &schemas.UserInfo{} err := s.db.Get(user, query, scode) if err != nil { return nil, err } return user, nil } // HasPermission 检查用户是否有特定权限 func (s *MService) HasPermission(userID int, permission string) error { query := ` SELECT COUNT(*) > 0 AS has_permission FROM admin_user au JOIN admin_user_role aur ON au.id = aur.user_id JOIN admin_role ar ON aur.role_id = ar.id JOIN admin_role_permission arp ON ar.id = arp.role_id JOIN admin_permission ap ON arp.permission_id = ap.id WHERE au.id = ? AND ap.name = ? ` var hasPermission bool err := s.db.Get(&hasPermission, query, userID, permission) if err != nil { return err } fmt.Println(hasPermission) // 根据权限检查结果返回相应错误 if !hasPermission { return fmt.Errorf("user %d does not have permission %s", userID, permission) } return nil } // IsSuperAdmin 检查是否为超级管理员 func (s *MService) IsSuperAdmin(userID int) bool { return userID == 1 }