package shared import ( "strings" "hyapp-admin-server/internal/model" ) func UserDTOs(users []model.User) []map[string]interface{} { out := make([]map[string]interface{}, 0, len(users)) for _, user := range users { out = append(out, UserDTO(user)) } return out } func UserDTO(user model.User) map[string]interface{} { 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.LastLoginAt != nil { lastLogin = user.LastLoginAt.Format("01-02 15:04") } return map[string]interface{}{ "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, "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 }