2011-08-20 33 views
1

我希望尽可能简单,所以我没有发布任何代码,因为它可能只是混淆了事情。带有角色的WCF PrincipalPermission,为子方法配置

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

假设我有我的公开曝光接口

  • GetPerson 4种方法
  • deletePerson的
  • 的updatePerson
  • GetSurnameAndForename

我已附上

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

到第一3和

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

到最后一个。

这工作正常,并阻止'GENERALUSER'访问前3个方法。

但是,GetSurnameAndForename方法在内部调用GetPerson方法,该方法失败。我明白为什么它失败了,但是有没有一种首选的方法可以让GetSurnameAndForename在没有POWERUSER角色的情况下调用GetPerson?

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

回答

3

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

+0

谢谢,现在你说得很明显。今天在我的大脑里发出咔哒咔哒的声音,有时你看不到树林里的木头......再次感谢! –

2

使用Principal Permission Attributes保证交叉边界是灾难的秘诀。