我希望尽可能保持简单,所以我不会发布任何代码,因为它可能会让事情变得混乱。
我已使用WCF基于角色的授权在我的应用程序中实现了安全性。
假设我在公开的界面上有4种方法
我已附上
[PrincipalPermission(SecurityAction.Demand,Role="POWERUSER")]
到第3个,和
[PrincipalPermission(SecurityAction.Demand,Role="GENERALUSER")]
到最后一个。
这样可以正常工作,并阻止'GENERALUSER'访问前3种方法。
然而,方法GetSurnameAndForename在内部调用GetPerson方法,该方法失败。我明白为什么它会失败,但有没有一种首选的方法允许GetSurnameAndForename在没有POWERUSER角色的情况下调用GetPerson?
我能想到的唯一方法就是在IsInRole方法中添加一个额外的检查来检查CallStack以查看此调用是来自内部方法还是外部调用。这个解决方案有效,但不是很优雅。
答案 0 :(得分:3)
是的,有一个非常简单的解决方案。将GetPerson
提供的逻辑包装到私有方法,并从GetPerson
和GetSurnameAndForename
调用该新方法。
答案 1 :(得分:2)
使用主要权限属性保护的交叉边界是灾难的一个方法。