带有角色的WCF PrincipalPermission,配置子方法

时间:2011-08-20 16:54:13

标签: c# .net wcf wcf-security

我希望尽可能保持简单,所以我不会发布任何代码,因为它可能会让事情变得混乱。

我已使用WCF基于角色的授权在我的应用程序中实现了安全性。

假设我在公开的界面上有4种方法

  • GetPerson
  • deletePerson的
  • 的updatePerson
  • GetSurnameAndForename

我已附上

[PrincipalPermission(SecurityAction.Demand,Role="POWERUSER")]

到第3个,和

[PrincipalPermission(SecurityAction.Demand,Role="GENERALUSER")]

到最后一个。

这样可以正常工作,并阻止'GENERALUSER'访问前3种方法。

然而,方法GetSurnameAndForename在内部调用GetPerson方法,该方法失败。我明白为什么它会失败,但有没有一种首选的方法允许GetSurnameAndForename在没有POWERUSER角色的情况下调用GetPerson?

我能想到的唯一方法就是在IsInRole方法中添加一个额外的检查来检查CallStack以查看此调用是来自内部方法还是外部调用。这个解决方案有效,但不是很优雅。

2 个答案:

答案 0 :(得分:3)

是的,有一个非常简单的解决方案。将GetPerson提供的逻辑包装到私有方法,并从GetPersonGetSurnameAndForename调用该新方法。

答案 1 :(得分:2)

使用主要权限属性保护的交叉边界是灾难的一个方法。