66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package shared
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"hyapp-admin-server/internal/model"
|
|
)
|
|
|
|
func UserDTOs(users []model.User) []map[string]any {
|
|
out := make([]map[string]any, 0, len(users))
|
|
for _, user := range users {
|
|
out = append(out, UserDTO(user))
|
|
}
|
|
return out
|
|
}
|
|
|
|
func UserDTO(user model.User) map[string]any {
|
|
roleNames := make([]string, 0, len(user.Roles))
|
|
roleIDs := make([]uint, 0, len(user.Roles))
|
|
for _, role := range user.Roles {
|
|
roleNames = append(roleNames, role.Name)
|
|
roleIDs = append(roleIDs, role.ID)
|
|
}
|
|
role := ""
|
|
if len(roleNames) > 0 {
|
|
role = strings.Join(roleNames, "、")
|
|
}
|
|
|
|
lastLogin := "-"
|
|
if user.LastLoginAtMS != nil {
|
|
lastLogin = time.UnixMilli(*user.LastLoginAtMS).UTC().Format("01-02 15:04")
|
|
}
|
|
|
|
return map[string]any{
|
|
"id": user.ID,
|
|
"account": user.Username,
|
|
"username": user.Username,
|
|
"name": user.Name,
|
|
"team": user.Team,
|
|
"status": user.Status,
|
|
"mfa": BoolText(user.MFAEnabled),
|
|
"mfaEnabled": user.MFAEnabled,
|
|
"lastLogin": lastLogin,
|
|
"lastLoginMs": user.LastLoginAtMS,
|
|
"roles": user.Roles,
|
|
"role": role,
|
|
"roleIds": roleIDs,
|
|
"permissions": PermissionsForUser(user),
|
|
}
|
|
}
|
|
|
|
func PermissionsForUser(user model.User) []string {
|
|
set := map[string]struct{}{}
|
|
for _, role := range user.Roles {
|
|
for _, permission := range role.Permissions {
|
|
set[permission.Code] = struct{}{}
|
|
}
|
|
}
|
|
out := make([]string, 0, len(set))
|
|
for code := range set {
|
|
out = append(out, code)
|
|
}
|
|
return out
|
|
}
|