本篇說明系統邏輯層中的網頁內容發佈元件所提供的功能,以及呼叫者端(展示層的網頁程式)如何使用這個元件。
下圖是網頁內容發佈元件關聯圖,
網頁內容發佈元件 ArticlePublisherLogic 主要提供兩大類的功能,
- 自訂帳號授權結果
- 資料存取
1. 自訂帳號授權結果
「網站架構管理」的權限判斷規則比較特別,不像「帳號管理」只有清單頁(最上層)和設定頁(子項目)兩層的差別,需要即時判斷指定的網頁在樹狀的網站架構中是否有專用的授權規則,或是該採用父層的子項目授權規則。
元件透過建構式傳入的實作介面 IAuthenticationConditionProvider 物件取得展示層網頁程式指定的網頁代碼與登入者資訊(身分、是否為管理者)做為權限判斷的條件值。(若呼叫者端只需要使用「資料存取」的功能,則不需要在建構式輸入參數 IAuthenticationConditionProvider)
依照帳號與權限元件制定的 客製化權限判斷 規則,本元件實作介面 ICustomEmployeeAuthorizationResult 的方法 InitialAuthorizationResult(bool isTopPageOfOperation, EmployeeAuthorizations authorizations) 來達成上述的權限判斷規則。詳細的實作方式於下一篇說明。
2. 資料存取
本元件除了自訂帳號授權結果用的方法之外,都是存取資料庫用的方法,以下為相關的方法命名規則,
- GetYYYListForZZZ()
- GetYYYDataForZZZ()
- InsertYYYData()
- UpdateYYYData()
- DeleteYYYData()
- IncreaseYYYSortNo()
- DecreaseYYYSortNo()
ZZZ 代表用於前台 (Frontend) 或後台 (Backend) 網頁的差別。例如:GetArticleDataForBackend() 用於後台網頁、GetArticleDataForFrontend() 用於前台網頁。
取得資料用的方法名稱皆以 Get 開頭命名,而不管是取得清單資料或是單一資料,皆使用 DataSet 存放回傳值,留給 Stored Procedure 可回傳多個資料表的彈性。
新增資料、更新資料、刪除資料用的方法名稱以順序以 Insert, Update, Delete 開頭命名。
還有一種是把 Insert, Update 指令都寫在 Stored Procedure 裡的,改以 Save 開頭命名。
用來將資料的排序編號與其下一項資料的排序編號 (數字較大) 對調的,以 Increase 開頭命名。反之,與其上一項資料的排序編號 (數字較小) 對調的,以 Decrease 開頭命名。
若執行上述存取資料庫用的方法失敗了,可使用 GetDbErrMsg() 取得資料層回傳的錯誤訊息文字。
接下來以「網站架構管理」的網頁節點內容頁、網頁設定頁、網頁附件設定頁為例說明網頁程式使用網頁內容發佈元件的方式。
網頁節點內容頁 Article-Node.aspx.cs
初始化元件:
public partial class Article_Node : BasePage { protected ArticleCommonOfBackend c; protected ArticlePublisherLogic artPub; protected EmployeeAuthorityLogic empAuth; // ...略... protected void Page_PreInit(object sender, EventArgs e) { c = new ArticleCommonOfBackend(this.Context, this.ViewState); // ...略... artPub = new ArticlePublisherLogic(c); empAuth = new EmployeeAuthorityLogic(c); empAuth.SetCustomEmployeeAuthorizationResult(artPub); empAuth.InitialAuthorizationResultOfTopPage(); // ...略... }
Line 10: 產生「網站架構管理」專屬的管理頁共用元件。
Line 13: 產生網頁內容發佈元件,同時將管理頁共用元件傳入提供驗證時需要的條件值。
Line 15: 產生帳號與權限元件,同時將管理頁共用元件傳入提供驗證時需要的條件值。
Line 16: 將網頁內容發佈元件設定為帳號與權限元件的自訂帳號授權結果用的外部元件。
Line 17: 初始化授權結果,將透過網頁內容發佈元件取得並且暫存目前登入帳號被授權使用「網站架構管理」的授權設定值。
* 完整程式碼請參考 Article-Node.aspx.cs
網頁設定頁 Article-Config.aspx.cs
初始化元件:
public partial class Article_Config : System.Web.UI.Page { protected ArticleCommonOfBackend c; protected ArticlePublisherLogic artPub; protected EmployeeAuthorityLogic empAuth; protected void Page_PreInit(object sender, EventArgs e) { c = new ArticleCommonOfBackend(this.Context, this.ViewState); // ...略... artPub = new ArticlePublisherLogic(c); empAuth = new EmployeeAuthorityLogic(c); empAuth.SetCustomEmployeeAuthorizationResult(artPub); empAuth.InitialAuthorizationResultOfTopPage(); }
Line 9: 產生「網站架構管理」專屬的管理頁共用元件。
Line 12: 產生網頁內容發佈元件,同時將管理頁共用元件傳入提供驗證時需要的條件值。
Line 14: 產生帳號與權限元件,同時將管理頁共用元件傳入提供驗證時需要的條件值。
Line 15: 將網頁內容發佈元件設定為帳號與權限元件的自訂帳號授權結果用的外部元件。
Line 16: 初始化授權結果,將透過網頁內容發佈元件取得並且暫存目前登入帳號被授權使用「網站架構管理」的授權設定值。
* 與 帳號與權限系統元件說明:元件提供的功能與使用方式 範例中帳號設定頁不同的是,這裡使用 InitialAuthorizationResultOfTopPage() 方法名稱結尾為 TopPage,不是帳號設定頁用的 SubPages,因為網頁設定頁看資料的角度與網頁節點內容頁相同。
初始化元件:
public partial class Article_Attach : System.Web.UI.Page { protected ArticleAttachCommonOfBackend c; protected ArticlePublisherLogic artPub; protected EmployeeAuthorityLogic empAuth; // ...略... protected void Page_PreInit(object sender, EventArgs e) { c = new ArticleAttachCommonOfBackend(this.Context, this.ViewState); // ...略... artPub = new ArticlePublisherLogic(c); empAuth = new EmployeeAuthorityLogic(c); empAuth.SetCustomEmployeeAuthorizationResult(artPub); empAuth.InitialAuthorizationResultOfSubPages(); // ...略... }
Line 10: 產生「網站架構管理-附件設定頁」專屬的管理頁共用元件。
Line 13: 產生網頁內容發佈元件,同時將管理頁共用元件傳入提供驗證時需要的條件值。
Line 15: 產生帳號與權限元件,同時將管理頁共用元件傳入提供驗證時需要的條件值。
Line 16: 將網頁內容發佈元件設定為帳號與權限元件的自訂帳號授權結果用的外部元件。
Line 17: 初始化授權結果,將透過網頁內容發佈元件取得並且暫存目前登入帳號被授權使用「網站架構管理」的授權設定值。這裡使用 InitialAuthorizationResultOfSubPages()(方法名稱結尾為 SubPages),指定要使用的權限規則為「作業選項的子項目」。
* 完整程式碼請參考 Article-Attach.aspx.cs
沒有留言:
張貼留言