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

练习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.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-10-14 23:44 TerryLee 阅读(5160) 评论(26)  编辑 收藏 网摘 所属分类: [10]  模式与实践

  回复  引用    
#1楼2006-10-16 10:22 | Jim[匿名][未注册用户]
如果要把规则也放入数据库中要如何做呢?
  回复  引用  查看    
#2楼[楼主]2006-10-16 21:23 | TerryLee      
@Jim[匿名]
把规则放入数据库中需要依赖于DAAB

  回复  引用    
#3楼2006-10-17 14:10 | Jim[匿名][未注册用户]
要访问Database依赖于DAAB是一定的,
只是我不太理解在安全应用程序块要怎样去实现使用企业库配置工具添加放入数据库中的授权规则,
能否就上面的这个范例讲解以下?谢谢

  回复  引用  查看    
#4楼[楼主]2006-10-17 20:28 | TerryLee      
@Jim[匿名]
在网上有人写了一个,是基于Enterprise Library 1.1的,如果需要你可以发邮件给我,我发给你参考一下吧。

  回复  引用    
#5楼2006-10-18 08:32 | Jim[匿名][未注册用户]
谢谢,我已经找到了,在看,
  回复  引用  查看    
#6楼[楼主]2006-10-18 21:47 | TerryLee      
@Jim[匿名]
:)

  回复  引用    
#7楼2006-11-28 13:33 | aa[匿名][未注册用户]
垃圾,
关键的"安全"的数据如何存储到数据库的不说,说这么多废话.

  回复  引用  查看    
#8楼[楼主]2006-11-28 13:36 | TerryLee      
@aa[匿名]

家族人品有问题……

// 这是翻译的MS官方的EL Hands On Lab,并不是我所写

  回复  引用    
#9楼2006-11-30 00:36 | 阿Q[匿名][未注册用户]
你好,请问基于数据库的 安全管理怎么做?

好像基于数据库的安全管理是基于以下几个表:
Users, Roles, UserRoles, Profile 表

请问在我自己的系统中怎么使用基于数据库的安全管理?

谢谢!


  回复  引用  查看    
#10楼[楼主]2006-11-30 08:51 | TerryLee      
@阿Q[匿名]
在EL中,并不直接支持给予数据库,需要自己写扩展

  回复  引用    
#11楼2007-03-24 22:40 | SecurityDatabase[未注册用户]
基于数据的SecurityDatabaseConsole一直没有出2.0版本的。
  回复  引用    
#12楼2007-03-29 14:11 | j.m.s[未注册用户]
@TerryLee
基于数据库的安全管理给我一份.e-mail:xlhn_oykh@sina.com.cn谢谢

  回复  引用    
#13楼2007-08-19 11:38 | Enterprise Library[未注册用户]
基于Enterprise Library 1.1 使用企业库配置工具添加放入数据库中的授权规则 的示范代码能否发给我一份,谢谢,czr37@sina.com
  回复  引用  查看    
#14楼2007-08-21 12:03 | fanrsh      
创建了一个 EnterpriseLibrary 交流,学习群,想一起研究的朋友加入(8456438)
  回复  引用    
#15楼2008-06-30 18:46 | melodyg[未注册用户]
您好!
  看了很久的資料,實在不太清楚該把這個問題放在那一篇下比較好,若放得不好請包涵
用Enterprise Library 加密一個app.config,使用user:administrator 一切正讀取都正常,但使用另一個user,則會無法讀取該app.config,會出現以下錯誤
Failed to decrypt using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: The RSA key container could not be opened

請問我該如何處理,或是往那個方向找答案

                      Melody 上

  回复  引用    
#16楼2008-07-01 17:06 | melodyg[未注册用户]
找到答案,
spnet_regiis -pa "NetFrameworkConfigurationKey" "用戶名"
用戶名這個user,就可以使用該app.config


  回复  引用    
#17楼2009-01-08 22:08 | task[未注册用户]
楼主把讲的这个代码和XML发一份我吧,
mail:mylife37@live.cn

谢谢

  回复  引用  查看    
#18楼[楼主]2009-01-12 11:28 | TerryLee      
@task
2.0的代码,现在早找不到了。。。




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 529229





相关文章:

相关链接: