C# 模块化应用模式:如何检查哪个是调用模块
我目前正在使用prism 5.0在c#NET 4.5中编写一个模块化桌面应用程序 我的应用程序由“核心”(或主机)和几个模块组成。 我的每个模块都实现了prism提供的C# 模块化应用模式:如何检查哪个是调用模块,c#,security,prism,modularity,C#,Security,Prism,Modularity,我目前正在使用prism 5.0在c#NET 4.5中编写一个模块化桌面应用程序 我的应用程序由“核心”(或主机)和几个模块组成。 我的每个模块都实现了prism提供的IModule接口。 我的应用程序的核心为模块提供了一个“API”,因此它们可以轻松地与应用程序/其他模块交互。例如,“API”允许模块发布或订阅事件或与BDD通信 我的问题是: BDD中有一些敏感信息,我事先不知道哪个模块将运行。我想处理“恶意”模块的可能性:我想为我的主机应用程序添加一层安全性。例如,我想检查模块是否有权删除B
IModule
接口。
我的应用程序的核心为模块提供了一个“API”,因此它们可以轻松地与应用程序/其他模块交互。例如,“API”允许模块发布或订阅事件或与BDD通信
我的问题是:
BDD中有一些敏感信息,我事先不知道哪个模块将运行。我想处理“恶意”模块的可能性:我想为我的主机应用程序添加一层安全性。例如,我想检查模块是否有权删除BDD中的内容。
我怎么能这么做?我已经拥有BDD中存储的每个模块的权限,但是我怎么知道哪个模块正在以安全的方式调用API呢
一切都应该动态完成,因为我事先不知道哪个模块将运行
现在我想到的是:
- 对API的调用应该包含一个额外的参数:a
。但是模块可以通过执行Type
typeof(someType)
- 对API的调用应该包含一个额外的参数:a
:调用模块将自己(IModule
)作为参数发送,以便我可以检查API中的类型。但是,调用模块仍然可以通过提供的UnityContainer或其他方式获取另一个模块的实例,从而很容易地伪造它this
- 通过
检查调用对象的类型。这个可能更“安全”,但在我看来它真的很重而且很脏StackFrame
这是我能想到的最安全的方法。您可以使用强命名模块。
看见通过这种方式,您可以对每个模块(程序集)进行身份验证和授权。很好,似乎非常适合我的情况!谢谢!我没想到会有这样的事