Enterprise Library 2.0 Hands On Lab 翻譯(13):安全應(yīng)用程序塊(二)
練習(xí)2:在應(yīng)用程序中使用基于角色的授權(quán)
通過該練習(xí)將學(xué)習(xí)使用AuthorizationProvider在應(yīng)用程序中進(jìn)行基于角色的授權(quán)。
第一步
打BugSmak.sln項(xiàng)目,默認(rèn)的安裝路徑應(yīng)該為C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Security\exercises\ex02\begin,并編譯。
第二步 企業(yè)庫配置工具
1.使用Enterprise Library配置工具配置應(yīng)用程序,可以通過開始菜單打開該配置工具,選擇所有程序| Microsoft patterns and practices | Enterprise Library | Enterprise Library Configuration,并打開App.config文件。或者直接在Visual Studio中使用該工具打開配置文件。
2.在解決方案管理器中選中App.config文件,在View菜單或者在右鍵菜單中選擇Open With…,將打開OpenWith對話框,單擊Add按鈕。

3.在Add Program對話框中,設(shè)置Program name指向EntLibConfig.exe文件,默認(rèn)的路徑為C:\Program Files\Microsoft Enterprise Library January 2006\bin,設(shè)置Friendly name為Enterprise Library Configuration,單擊OK按鈕。

Visual Studio會把配置文件(App.config)作為一個(gè)命令行參數(shù)傳遞給EntLibConfig.exe。
4.在Open With對話框中,選中Enterprise Library Configuration并單擊OK按鈕。

第三步 使用企業(yè)庫配置工具添加授權(quán)規(guī)則
1.在應(yīng)用程序上右擊并選擇New | Security Application Block。

2.添加新的Authorization Rule Provider。選中Security Application Block | Authorization節(jié)點(diǎn),選擇Action | New | Authorization Rule Provider菜單命令。

3.設(shè)置屬性Name為BugSmak Rules。

4.選中Security Application Block | Authorization | BugSmak Rules節(jié)點(diǎn),選擇Action | New | Rule菜單命令。

5.在Expression屬性上點(diǎn)擊ellipsis打開角色表達(dá)式編輯器。

6.設(shè)置如下屬性并單擊Ok按鈕
Rule Name = Raise Bug
Expression = R:Developer OR R:Employee OR R:Manager

用戶必須在Developer, Employee或者 Manager角色中。
7.分別添加如下規(guī)則:
|
Rule Name |
Expression |
|
Raise Bug ** |
R:Developer OR R:Employee OR R:Manager |
|
Assign Bug |
R:Manager |
|
Resolve Bug |
R:Developer OR R:Manager |

8.選擇Security Application Block節(jié)點(diǎn)并設(shè)置如下屬性:
DefaultAuthorizationInstance = BugSmak Rules

第四步 添加基于授權(quán)的任務(wù)
1.打開文件TaskForms \ RaiseBug.cs的源代碼,添加如下代碼:
//[PrincipalPermission(SecurityAction.Demand, Role = "Employee")]
//[PrincipalPermission(SecurityAction.Demand, Role = "Developer")]
//[PrincipalPermission(SecurityAction.Demand, Role = "Manager")]
public static RaiseBug Create()
{
// TODO: Check Authorization
if (!SecurityHelper.Authorized(AuthRule.Raise))
{
throw new SecurityException();
}
return new RaiseBug();
}其他兩個(gè)窗體AssignBug.cs和ResolveBug.cs添加的代碼類似。
2.添加對如下程序集的引用。
Microsoft.Practices.EnterpriseLibrary.Security.dll
3.打開文件Security \ SecurityHelper.cs,添加如下命名空間。
using Microsoft.Practices.EnterpriseLibrary.Security;4.在方法Authorized中添加如下代碼。
public static bool Authorized(string rule)
{
bool authorized = false;
// TODO: Check rule-base authorization
IAuthorizationProvider ruleProvider;
ruleProvider = AuthorizationFactory.GetAuthorizationProvider();
authorized = ruleProvider.Authorize(Thread.CurrentPrincipal, rule);
return authorized;
}
5.運(yùn)行應(yīng)用程序,分別以Tom, Dick和Harry登錄,測試他們的訪問權(quán)限。
|
User |
Task Access |
|
Tom (Employee) |
Raise New Bug |
|
Dick (Developer) |
Raise New Bug Resolve Bug |
|
Harry (Manager) |
Raise New Bug Resolve Bug Assign Bug |
6.關(guān)閉應(yīng)用程序。
更多Enterprise Library的文章請參考《Enterprise Library系列文章》
Worktile,新一代簡單好用、體驗(yàn)極致的團(tuán)隊(duì)協(xié)同、項(xiàng)目管理工具,讓你和你的團(tuán)隊(duì)隨時(shí)隨地一起工作。完全免費(fèi),現(xiàn)在就去了解一下吧。
https://worktile.com



浙公網(wǎng)安備 33010602011771號