注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 IB客座主编(四)美国西蒙公..
 帮助

Enterprise Library 2.0 Hands On Lab 翻译(13):安全应用程序块(二)


2006-10-14 23:44:00
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://terrylee.blog.51cto.com/342737/67644
练习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 nameEnterprise 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.设置属性NameBugSmak Rules
4.选中Security Application Block | Authorization | BugSmak Rules节点,选择Action | New | Rule菜单命令。
5.在Expression属性上点击ellipsis打开角色表达式编辑器。
6.设置如下属性并单击Ok按钮
Rule Name = Raise Bug
Expression = R:Developer OR R:Employee OR R:Manager
用户必须在Developer, Employee或者 Manager角色中。
7.分别添加如下规则:
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节点并设置如下属性:
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.csResolveBug.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.运行应用程序,分别以Tom, DickHarry登录,测试他们的访问权限。
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.关闭应用程序。
 
更多Enterprise Library的文章请参考《Enterprise Library系列文章

本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/67644





    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: