常见问题:如何使用类/方法属性在任何.NET应用程序(例如,WCF应用程序)中实现用户访问权限区分系统?
所以,我们有:
Role
)可以为特定角色指定每个类/方法。
[AuthorizationAttribute(Roles = new Role [] {Role.Admin})] 公共类UserService:IUserService {
}
如果用户的一组角色不包含此角色,则用户无法访问该方法。
更新。我试图让问题描述更加清晰。阿克顿的解决方案很适合这个问题。
答案 0 :(得分:3)
可以像您建议的那样创建属性安全模型,但这并不容易。您的安全对象必须从ContextBoundObject继承您的安全属性(或实现ContextAttribute接口)。然后:
MySecurityProperty
,实现IContextProperty
和IContributeObjectSink
接口,并将其添加到IConstructionCallMessage.ContextProperties
集合。MySecurityAspect
,实现IMessageSink接口。IMethodMessage
的属性,以查看它是否正在使用您的安全属性调用方法或类并执行相应的检查。如果呼叫未经授权,则抛出相应类型的异常。它需要几个小时才能让它工作,但是,一旦它完成,它是有道理的。它只是.Net框架中一个非常不受支持的部分。除了复杂性之外,最大的问题是它会强制您的安全类继承ContextBoundObject而不是任何其他库类。 ContextBoundObject也继承自IMethodMessage,这可能会干扰序列化。
有关更深入的解释,请参阅MarshalByRef。