您的位置:首页 > 编程语言 > C#

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

2012-03-14 15:20 791 查看
續上篇,[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:
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

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





最後改用Pemission[]才得已解決,也花掉了我一天時間

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

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

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

在上一篇角色切換時有用到 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();
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

來看一下執行效果

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





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





按下User Login,用user帳號登入





按下Power Login,用power帳號登入





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

Security.Form-1.zip
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐