本文共 2773 字,大约阅读时间需要 9 分钟。
练习2:在应用程序中使用基于角色的授权
通过该练习将学习使用AuthorizationProvider在应用程序中进行基于角色的授权。 打BugSmak.sln项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Security\exercises\ex02\begin,并编译。 1 .使用Enterprise Library配置工具配置应用程序,可以通过开始菜单打开该配置工具,选择所有程序| Microsoft patterns and practices | Enterprise Library | Enterprise Library Configuration,并打开App.config文件。或者直接在Visual Studio中使用该工具打开配置文件。 2 .在解决方案管理器中选中App.config文件,在View菜单或者在右键菜单中选择Open With…,将打开OpenWith对话框,单击Add按钮。 3 .在Add Program对话框中,设置Program name指向EntLibConfig.exe文件,默认的路径为C:\Program Files\Microsoft Enterprise Library January 2006\bin,设置Friendly name为Enterprise Library Configuration,单击OK按钮。 Visual Studio 会把配置文件(App.config)作为一个命令行参数传递给EntLibConfig.exe。 4 .在Open With对话框中,选中Enterprise Library Configuration并单击OK按钮。 1 .在应用程序上右击并选择New | Security Application Block。 2 .添加新的Authorization Rule Provider。选中Security Application Block | Authorization节点,选择Action | New | Authorization Rule Provider菜单命令。 3 .设置属性Name为BugSmak Rules。 4 .选中Security Application Block | Authorization | BugSmak Rules节点,选择Action | New | Rule菜单命令。 5 .在Expression属性上点击ellipsis打开角色表达式编辑器。 6 .设置如下属性并单击Ok按钮 Expression = R:Developer OR R:Employee OR R:Manager 用户必须在Developer, Employee或者 Manager角色中。 | |
| R:Developer OR R:Employee OR R:Manager |
| |
| |
8 .选择Security Application Block节点并设置如下属性: DefaultAuthorizationInstance = BugSmak Rules 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();} 其他两个窗体 AssignBug.cs和 ResolveBug.cs添加的代码类似。
Microsoft.Practices.EnterpriseLibrary.Security.dll 3 .打开文件Security \ SecurityHelper.cs,添加如下命名空间。 using Microsoft.Practices.EnterpriseLibrary.Security; 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
.运行应用程序,分别以Tom, Dick和Harry登录,测试他们的访问权限。 更多Enterprise Library的文章请参考《》 本文转自lihuijun51CTO博客,原文链接: http://blog.51cto.com/terrylee/67644 ,如需转载请自行联系原作者