博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enterprise Library 2.0 Hands On Lab 翻译(13):安全应用程序块(二)
阅读量:6008 次
发布时间:2019-06-20

本文共 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 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
用户必须在DeveloperEmployee或者 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的源代码,添加如下代码:
None.gif
//
[PrincipalPermission(SecurityAction.Demand, Role = "Employee")]
None.gif
None.gif
//
[PrincipalPermission(SecurityAction.Demand, Role = "Developer")]
None.gif
None.gif
//
[PrincipalPermission(SecurityAction.Demand, Role = "Manager")]
None.gif
None.gif
public
 
static
 RaiseBug Create()
None.gif
ExpandedBlockStart.gif
{
InBlock.gif    
// TODO: Check Authorization
InBlock.gif
InBlock.gif    
if (!SecurityHelper.Authorized(AuthRule.Raise))
InBlock.gif
ExpandedSubBlockStart.gif    
{
InBlock.gif
InBlock.gif        
throw new SecurityException();
InBlock.gif
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif    
return new RaiseBug();
InBlock.gif
ExpandedBlockEnd.gif}
其他两个窗体 AssignBug.cs和 ResolveBug.cs添加的代码类似。
2
.添加对如下程序集的引用。
Microsoft.Practices.EnterpriseLibrary.Security.dll
3
.打开文件Security \ SecurityHelper.cs,添加如下命名空间。
None.gif
using
 Microsoft.Practices.EnterpriseLibrary.Security;
4
.在方法Authorized中添加如下代码。
None.gif
public
 
static
 
bool
 Authorized(
string
 rule)
None.gif
ExpandedBlockStart.gif
{
InBlock.gif
InBlock.gif    
bool authorized = false;
InBlock.gif
InBlock.gif    
// TODO: Check rule-base authorization
InBlock.gif
InBlock.gif    IAuthorizationProvider ruleProvider;
InBlock.gif
InBlock.gif    ruleProvider 
= AuthorizationFactory.GetAuthorizationProvider();
InBlock.gif
InBlock.gif    authorized 
= ruleProvider.Authorize(Thread.CurrentPrincipal, rule);
InBlock.gif
InBlock.gif    
return authorized;
InBlock.gif
ExpandedBlockEnd.gif}
None.gif
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的文章请参考《
本文转自lihuijun51CTO博客,原文链接:
http://blog.51cto.com/terrylee/67644
 ,如需转载请自行联系原作者
你可能感兴趣的文章
Gradle 配置debug和release工程目录
查看>>
curl指令的使用
查看>>
LNAMP第二版(nginx 1.2.0+apache 2.4.2+php 5.4)
查看>>
MongoDB repl set权限认证配置步骤
查看>>
java学习笔记(1)
查看>>
禁止Mysql默认端口访问Internet - MySQL - IT技术网
查看>>
基于用户投票的排名算法(二):Reddit
查看>>
下午最后的草坪
查看>>
Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>
1.部分(苹果)移动端的cookie不支持中文字符,2.从json字符串变为json对象时,只支持对象数组...
查看>>
HDU3257 Hello World!【打印图案+位运算】
查看>>
Node.js 抓取电影天堂新上电影节目单及ftp链接
查看>>
从设计者的角度看 React
查看>>
CSS居中总结大全
查看>>
Elasticsearch 参考指南(安装X-Pack)
查看>>
[LintCode] 604. Design Compressed String Iterator
查看>>
微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators!
查看>>
JavaScript基础---函数
查看>>
前端每日实战:120# 视频演示如何用纯 CSS 创作锡纸撕开的文字效果
查看>>
Laravel实用小功能
查看>>