TinySkin/service/admin.go
2023-10-05 15:59:20 +08:00

56 lines
1.4 KiB
Go

package service
import (
"context"
"errors"
"fmt"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
utilsService "github.com/xmdhs/authlib-skin/service/utils"
)
var ErrNotAdmin = errors.New("无权限")
func (w *WebService) IsAdmin(ctx context.Context, token string) error {
t, err := utilsService.Auth(ctx, yggdrasil.ValidateToken{AccessToken: token}, w.client, w.cache, &w.prikey.PublicKey, false)
if err != nil {
return fmt.Errorf("IsAdmin: %w", err)
}
u, err := w.client.User.Query().Where(user.ID(t.UID)).First(ctx)
if err != nil {
return fmt.Errorf("IsAdmin: %w", err)
}
if !utilsService.IsAdmin(u.State) {
return fmt.Errorf("IsAdmin: %w", ErrNotAdmin)
}
return nil
}
func (w *WebService) ListUser(ctx context.Context, page int) ([]model.UserList, int, error) {
u, err := w.client.User.Query().WithProfile().Limit(20).Offset((page - 1) * 20).All(ctx)
if err != nil {
return nil, 0, fmt.Errorf("ListUser: %w", err)
}
ul := make([]model.UserList, 0, len(u))
for _, v := range u {
ul = append(ul, model.UserList{
UserInfo: model.UserInfo{
UID: v.ID,
UUID: v.Edges.Profile.UUID,
IsAdmin: utilsService.IsAdmin(v.State),
},
Email: v.Email,
RegIp: v.RegIP,
})
}
uc, err := w.client.User.Query().Count(ctx)
if err != nil {
return nil, 0, fmt.Errorf("ListUser: %w", err)
}
return ul, uc, nil
}