[C#.NET][Winform][User Control] 使用 IExtenderProvider 擴充控制項屬性 並 驗証控制項角色 (再續)

[C#.NET][User Control] 使用 IExtenderProvider 擴充控制項屬性 並 驗証控制項角色 (再續)

續上篇,同樣的設計不知道會續到什麼時候(聳肩,我也不知道),可能直到我自己滿意為止吧,這篇解決了上篇的一些問題,主要是集合屬性無法讓VS自動反序列化,後來研究將集合屬性,改為繼承集合類別,這樣便可以讓VS正常的反序列化,就像Pemissions 類別一樣


public class Pemissions : List<Pemission>
{

}

[Serializable, TypeConverter(typeof(ExpandableObjectConverter))]
public class Role
{
    [DefaultValue(false)]
    public bool IsIdentity { get; set; }

    internal Pemissions _Pemissions;
    public ReadOnlyCollection<Pemission> Pemissions
    {
        get
        {
            return new ReadOnlyCollection<Pemission>(_Pemissions);
        }
    }
   
    public override string ToString()
    {
        return string.Format("Is Apply Identity={0}", IsIdentity);
    }
}

 

解決了集合的問題,也更改使用者體驗,有設定控制項的IsIdentity=true的控制項,程式才會驗証是否通過身份驗証,反之則不驗証。

image

 

另外,在Role屬性裡,預設加入3種權限


{
    if (this._Roles.ContainsKey(Ctrl))
    {
        return this._Roles[Ctrl];
    }
    else
    {
        Role role = new Role()
        {
            IsIdentity = false,
            _Pemissions = new Pemissions
            {
                new Pemission() { Role = RoleType.Admin, IsEdit = true, IsView = true },
                new Pemission() { Role = RoleType.PowerUser, IsEdit = false, IsView = true },
                new Pemission() { Role = RoleType.User, IsEdit = false, IsView = false }
            }
        };

        this._Roles.Add(Ctrl, role);
        return role;
    }
}



並且不讓使用者任意增加成員,避免不必要的錯誤。

在下圖我們看到左邊的Add/Remove按鈕被反白了,那是因為ReadOnlyCollection類別的關係;右邊的Role屬性被反白了,那也是我們不公開變更屬性的關係。

SNAGHTML246fe213

 

就設定上而言,這樣的做法的確比上篇好很多,如果你有用過上篇的範例,你會發現在這裡少按了很多按鈕。接下來,看看VS幫我們做了什麼。

VS會自動產生程式碼在Form1.Desinger.cs檔裡

SNAGHTML24810e23

 

而resources.GetObject("label1.Role")這些資訊放在Form1resx裡

SNAGHTML2482e3b9

 

而Form.resx內部長這樣,應該是存成了二進位

image

 

一載入沒有任何角色登入

SNAGHTML24758bf9

 

Admin登入

SNAGHTML2475db60

 

Power登入

SNAGHTML24760a5b

 

User登入

SNAGHTML24763052

 

同樣的,為了這效果又用掉了我一天的時間Orz!!

範例下載:

System.Windows.Forms.Extend.Security.zip

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo