将Declaractive PrincipalPermission转换为Programmatic .Demand

时间:2010-12-21 01:29:55

标签: asp.net wcf security principalpermission

我目前有两个这样的角色:

  

[的PrincipalPermission(SecurityAction.Demand,   角色= “域\管理员”)]   [的PrincipalPermission(SecurityAction.Demand,   角色= “域\ AnotherRole”)]

问题是这个继承的代码是特定于域的,我想最终从web.config文件中获取角色,所以我可以在不在域中的VM上工作。

我见过这样的例子:

PrincipalPermission permCheck = new PrincipalPermission(
                                     null, 
                                     @"Domain\Admin"); 
permCheck.Demand();

如果用户不在角色中,则抛出异常,如何更改此示例以允许这两个角色中的任何一个?我可以使用多个IPrincipal.IsInRole()然后抛出我自己的异常,但似乎可能有一种方法可以使用具有多个角色的.Demand方法。

更新12/21:基于Union链接的示例代码来自Ladislav的答案:

PrincipalPermission ppAdmin = new PrincipalPermission(null, @"Domain\Admin");
PrincipalPermission ppAnother = new PrincipalPermission(null, @"Domain\AnotherRole");
(ppAdmin.Union(ppAnother)).Demand();

但AzMan(Ladislav建议看起来更好但更复杂的解决方案)。

1 个答案:

答案 0 :(得分:2)

PrincipalPermission具有Union方法。此方法允许您在调用Demand之前组合多个PrincipalPermissions。但是,您可以检查Authorization manager(AzMan)和相关角色提供程序(AuthorizationStoreRoleProvider),而不是使用命令式权限。授权管理器允许您在应用程序中定义抽象角色,并通过MMC分配真实用户组和角色。