首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 權限管理(二):實體模型設計與基礎設施層構建

     編輯:關於ASP.NET

基類設計:BaseEntity

統一主鍵類型為 string(存儲 GUID),包含啟用狀態:

public class BaseEntity {
    private string id;
    [Key]
    [Display(Name = "主鍵")]
    public string Id {
        get { return id ?? Guid.NewGuid().ToString(); }
        set { id = value; }
    }
    [Display(Name = "狀態")]
    [Required(ErrorMessage = "狀態不能為空!")]
    public bool Enabled { get; set; }
}

優勢:GUID 主鍵利於分庫分表、合併數據、避免自增 ID 衝突;Enabled 實現軟刪除。

核心實體模型

實體說明關鍵關係
tbUser用戶多對多 tbRole
tbRole角色多對多 tbUser、多對多 tbModule
tbModule系統模塊/菜單被 tbRole 關聯
tbAction操作權限點屬於 tbModule
tbActionLog操作日志記錄用戶行為

關係建模

  • User ↔ Role:多對多,中間表 UserRole
  • Role ↔ Module:多對多,中間表 RoleModule,代表角色擁有模塊訪問權
  • Module → Action:一對多,模塊下包含具體操作(增/刪/改/查/導出等)

數據訪問基礎設施:IBaseDao 泛型接口

public interface IBaseDao<T> where T : BaseEntity {
    // 查詢
    IEnumerable<T> GetAllEntities(Func<T, bool> exp);
    int GetEntitiesCount(Func<T, bool> exp);
    IEnumerable<T> GetEntitiesForPaging(int pageNumber, int pageSize,
        Func<T, string> orderName, string sortOrder, Func<T, bool> exp);
    T GetEntity(Func<T, bool> exp);
    // 增刪改
    bool Insert(T entity);
    bool Update(T entity);
    bool Delete(T entity);
}

採用 Func<T, bool> 表達式樹作為查詢條件,支援 LINQ 動態構建 Where 子句,實現「寫一次、處處復用」的通用 CRUD。

現代視角:Entity Framework Core 內建 DbSet<T> 已提供豐富 LINQ 支持,Repository 模式爭議較大。若採用 DDD,建議按聚合根定制 Repository 而非泛型基類。

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