- Change ?? EAccessLevel.Admin fallback to ?? EAccessLevel.User in UserController.GetAll - Add .Include(u => u.MaintainedPersons) to UserRepository.GetAll() so MaintainedPersonIds/MaintainedPersonNames populate in list endpoint - Fix UsersMapper.cs method body indentation (was flush with class) - Add Maintainer-role visibility tests (68.5-68.8): promote user, test viewing admin, demote back
42 lines
2.0 KiB
C#
42 lines
2.0 KiB
C#
using Butter.Dtos.User;
|
|
using Butter.Types;
|
|
using Lactose.Models;
|
|
|
|
namespace Lactose.Mapper;
|
|
|
|
/// <summary>
|
|
/// Provides mapping methods for User objects.
|
|
/// </summary>
|
|
public static class UsersMapper {
|
|
/// <summary>
|
|
/// Maps a User object to a UserInfoDto object, filtering sensitive fields based on the viewer's access.
|
|
/// Sensitive fields (Email, Ban/Delete status, AccessLevel, MaintainedPersons) are only populated
|
|
/// when the viewer is an admin or viewing their own profile.
|
|
/// </summary>
|
|
/// <param name="user">The User object to map.</param>
|
|
/// <param name="viewerAccessLevel">The access level of the requesting user.</param>
|
|
/// <param name="viewerId">The ID of the requesting user (null if anonymous).</param>
|
|
/// <returns>A UserInfoDto object containing the mapped data.</returns>
|
|
public static UserInfoDto ToGetUsersDto(this User user, EAccessLevel viewerAccessLevel, Guid? viewerId) {
|
|
bool isAdmin = viewerAccessLevel >= EAccessLevel.Admin;
|
|
bool isSelf = viewerId == user.Id;
|
|
bool showSensitive = isAdmin || isSelf;
|
|
|
|
return new UserInfoDto {
|
|
Id = user.Id,
|
|
Username = user.Username,
|
|
Email = showSensitive ? user.Email : null,
|
|
CreatedAt = user.CreatedAt,
|
|
UpdatedAt = showSensitive ? user.UpdatedAt : null,
|
|
LastLogin = showSensitive ? user.LastLogin : null,
|
|
BannedAt = showSensitive ? user.BannedAt : null,
|
|
DeletedAt = isAdmin ? user.DeletedAt : null,
|
|
IsBanned = showSensitive && user.BannedAt != null,
|
|
AccessLevel = showSensitive ? user.AccessLevel : EAccessLevel.User,
|
|
MaintainedPersonIds = showSensitive ? user.MaintainedPersons?.Select(p => p.Id).ToList() : null,
|
|
MaintainedPersonNames = showSensitive ? user.MaintainedPersons?.Select(p => p.Name).ToList() : null
|
|
};
|
|
}
|
|
}
|
|
|