首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

ASP.NET MVC + EF 實現表字段級訪問權限:業務層過濾而非 EF 層面

     編輯:程式設計疑難解答

結論

EF(Entity Framework)**不支持**字段級權限映射**,只能在 **MVC 控制器/Service 層** 或 **視圖模型** 中實現。

實現方案

  1. DTO/視圖模型分層
    定義 UserFullDto(管理員)、UserBasicDto(普通用戶),Service 根據角色映射不同字段返回。
  2. 動態選擇字段
    var query = ctx.Users.Select(u => new { u.Id, u.Name, u.Email /* 管理員加 u.Salary */ }); 用表達式樹動態構建 Select 子句。
  3. ActionFilter 統一攔截
    在 OnActionExecuted 中根據 User.Role 過濾 ObjectResult.Value 的匿名對象/DTO 屬性(反射或 AutoMapper 忽略)。
  4. 前端配合
    Grid/Table 欄位按權限動態顯示/隱藏,後端仍需驗證防止繞過前端直接呼叫 API。

代碼片段:Service 層映射

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 層落地最乾淨。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved