EF(Entity Framework)**不支持**字段級權限映射**,只能在 **MVC 控制器/Service 層** 或 **視圖模型** 中實現。
UserFullDto(管理員)、UserBasicDto(普通用戶),Service 根據角色映射不同字段返回。var query = ctx.Users.Select(u => new { u.Id, u.Name, u.Email /* 管理員加 u.Salary */ }); 用表達式樹動態構建 Select 子句。OnActionExecuted 中根據 User.Role 過濾 ObjectResult.Value 的匿名對象/DTO 屬性(反射或 AutoMapper 忽略)。public UserDto GetById(int id, Role callerRole) {
var u = ctx.Users.Find(id);
var dto = new UserDto { Id = u.Id, Name = u.Name };
if (callerRole == Role.Admin) {
dto.Email = u.Email;
dto.Salary = u.Salary;
}
return dto;
}
「EF 管存取,業務管權限」——職責分離,字段級權限在 Service/Controller 層落地最乾淨。