service.xpcool.com/internal/service/auth.go

52 lines
1.3 KiB
Go

package service
import (
"context"
"service.xpcool.com/internal/model/dto"
)
type IUserAuth interface {
Login(context.Context, dto.UserLoginInput) (*dto.TokenPair, uint64, error)
Refresh(context.Context, string) (*dto.TokenPair, uint64, error)
}
type IAdminAuth interface {
Login(context.Context, dto.AdminLoginInput) (*dto.TokenPair, uint64, error)
HasPermission(context.Context, uint64, string) (bool, error)
}
type AuditEvent struct {
AdminID uint64
Permission, Method, Path, IP, Param string
DurationMS, StatusCode int
}
type IAdminAudit interface {
Record(context.Context, AuditEvent)
}
var (
localUserAuth IUserAuth
localAdminAuth IAdminAuth
localAdminAudit IAdminAudit
)
func UserAuth() IUserAuth {
if localUserAuth == nil {
panic("UserAuth implementation not registered")
}
return localUserAuth
}
func RegisterUserAuth(i IUserAuth) { localUserAuth = i }
func AdminAuth() IAdminAuth {
if localAdminAuth == nil {
panic("AdminAuth implementation not registered")
}
return localAdminAuth
}
func RegisterAdminAuth(i IAdminAuth) { localAdminAuth = i }
func AdminAudit() IAdminAudit {
if localAdminAudit == nil {
panic("AdminAudit implementation not registered")
}
return localAdminAudit
}
func RegisterAdminAudit(i IAdminAudit) { localAdminAudit = i }