上一篇介紹了 Authorization 與 Menu,但 ABP 是設計成將設定資料寫在程式裡的靜態的載入方式,但通常可能會有其他的資料來源,例如資料庫,所以這篇文章就來介紹如何透過從資料庫取得資料來動態載入設定。
首先會有一張系統 Menu 資料表如下圖,而我們可以將 Id 欄位當作 Permisson Name 來使用。(Permission Name 必須是唯一的)
接着在專案上撰寫該 Table 相關的程式碼,例如 Entity, Domain Service...etc。
準備好取得資料的相關程式碼之後,可以找到 AuthorizationProvider 以及 NavigationProvider,這 2 個 Provider 是專門用來提供 Permission 與 Menu 設定資料的,可以看到設定資料分別寫在 SetPermissions 與 SetNavigation 方法中。(如下圖)
接下來將寫好的 Domain Service 透過 Constructor 注入後,分別在 SetPermissions 與 SetNavigation 改成依 Service 取得的資料設定即可。
這邊要注意一下,在 SetPermissions 與 SetNavigation 方法上掛有 UnitOfWork 的屬性,這是因爲原本這 2 個方法被呼叫時,是沒有開啓資料庫連線的,所以透過這個屬性來開啓資料庫連線。
好了,到這邊就完成了動態載入 Permission 與 Menu,這個只是一個基本的做法,依需求的不同,都可以再調整,算是一個有一定程度的彈性可以調整的架構。