余小章 @ 大內聖殿
祕訣無它, 唯勤而已, by 余小章

导航

 

續上篇,[C#.NET][User Control] 使用 IExtenderProvider 擴充控制項屬性 並 驗証控制項角色,IExtenderProvider 替我們擴充了控制項的屬性而增加了不少彈性,在上篇的例子裡,我僅為控制項定義一個角色,若要為每個控制項定義一個以上的角色存取權限,像下圖

image

 

這只是根據上篇做的一個變化,屬性由Enum變成Collection而已,卻花掉了我兩天的時間,眉眉角角還真多,我本來是用List<Pemission>來處裡

public void SetPemission(Control Ctrl, List<Pemission> Pemissions)
{
     //TODO:
}

public ReadOnlyCollection<Pemission> GetPemission(Control Ctrl)
{
     //TODO:
}

只要定義好每一個控制項的屬性後,在設計階段的Form,就會出現反射失敗的訊息,不知道該如何解決。

image

 

最後改用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();
}

來看一下執行效果

有框起來的有定義角色,程式一執行的時候就反白,其餘的則保留原來的樣子

image

 

按下Admin Login,這是用admin帳號登入

image

 

按下User Login,用user帳號登入

image

 

按下Power Login,用power帳號登入

image

 

上篇程式碼貼的亂七八糟的,連我自己都看的很亂,這種範例還是直接看專案比較快

Security.Form-1.zip

posted on 2012-03-14 15:20  余小章  阅读(328)  评论(0编辑  收藏  举报