續上篇,[C#.NET][User Control] 使用 IExtenderProvider 擴充控制項屬性 並 驗証控制項角色,IExtenderProvider 替我們擴充了控制項的屬性而增加了不少彈性,在上篇的例子裡,我僅為控制項定義一個角色,若要為每個控制項定義一個以上的角色存取權限,像下圖
這只是根據上篇做的一個變化,屬性由Enum變成Collection而已,卻花掉了我兩天的時間,眉眉角角還真多,我本來是用List<Pemission>來處裡
public void SetPemission(Control Ctrl, List<Pemission> Pemissions) { //TODO: } public ReadOnlyCollection<Pemission> GetPemission(Control Ctrl) { //TODO: }
只要定義好每一個控制項的屬性後,在設計階段的Form,就會出現反射失敗的訊息,不知道該如何解決。
最後改用Pemission[]才得已解決,也花掉了我一天時間
public void SetPemission(Control Ctrl, List<Pemission> Pemissions) { //TODO: } public ReadOnlyCollection<Pemission> GetPemission(Control Ctrl) { //TODO: }
在上一篇角色切換時有用到 Thread.CurrentPrincipal.IsInRole(),這篇就沒辦法用了,改用別的方法切換角色
void login(string user) { this._Identity = new Identity(user); this._Principle = new Principle(_Identity); this.roleContainer1.SwitchRole(this._Identity); this.label1.Text = this._Principle.ToString(); }
來看一下執行效果
有框起來的有定義角色,程式一執行的時候就反白,其餘的則保留原來的樣子
按下Admin Login,這是用admin帳號登入
按下User Login,用user帳號登入
按下Power Login,用power帳號登入
上篇程式碼貼的亂七八糟的,連我自己都看的很亂,這種範例還是直接看專案比較快