113 lines
2.4 KiB
Go
113 lines
2.4 KiB
Go
// 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
|
||
}
|