Files
Quincy_admin/middle/middle_service.go
2026-03-26 22:13:03 +08:00

113 lines
2.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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
}