first commit
This commit is contained in:
112
middle/middle_service.go
Normal file
112
middle/middle_service.go
Normal file
@@ -0,0 +1,112 @@
|
||||
// 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
|
||||
}
|
||||
Reference in New Issue
Block a user