[C#.NET][Winform][User Control] 使用 IExtenderProvider 擴充控制項屬性 並 驗証控制項角色 (續)
續上篇,[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帳號登入
上篇程式碼貼的亂七八糟的,連我自己都看的很亂,這種範例還是直接看專案比較快
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET