基于用户权限的MEF组件

8
我几个月前开始接触MEF,一切看上去都很顺利,但现在我想在我的实际应用中使用MEF,在已认证用户的权限下加载或显示UI组件。我正在开发一款诊所病人管理系统,希望实现基于用户类型显示MEF组成的UI组件的场景。例如,如果经过身份验证的用户是医生,我希望显示特定的组件并隐藏其他组件。
我想要实现的是像ISystemComponent这样的东西,它具有一些属性和方法,因此管理人员可以控制每个用户的访问级别,并且根据数据库记录,MEF组合的控件将显示给最终用户。我还考虑使用MetaData接口来导出组件,那么如何达到期望的结果呢?
非常感谢任何正确的指引。

目标呈现层?WPF 还是 WinForms? - Matthew Abbott
不是WinForms,而是WPF,或者也可能是Silverlight。 - Rati_Ge
你有几个框架可以完全满足你的需求,例如 PRISM(可能使用 MEF 或其他 IOC 容器)。 - Amittai Shapira
你能推荐除 PRISM 之外的任何其他 IoC 吗?我们不想实现 PRISM。 - Rati_Ge
4个回答

4
我通过使用模块ID的元数据属性和包含权限的表来实现此操作。
在接口上执行ImportMany,然后使用反射基于元数据属性进行过滤,并与表中的权限进行比较。
此博客文章描述了涉及的所有MEF。

http://blogs.microsoft.co.il/blogs/bnaya/archive/2010/01/20/mef-for-beginner-metadata-part-8.aspx

其他链接..

http://blogs.microsoft.co.il/blogs/bnaya/archive/2010/01/09/mef-for-beginner-toc.aspx

http://mef.codeplex.com/wikipage?title=Exports%20and%20Metadata&referringTitle=Guide

MEF插件与安全性和配置效率

使用ImportMany和ExportMetadata的MEF

本文将展示如何从xaml导入

http://blogs.microsoft.co.il/blogs/bnaya/archive/2010/03/20/mef-for-beginner-import-from-xaml-part-11.aspx


谢谢,那些链接对我非常有帮助。 我确切地考虑使用元数据,并在属性内使用某种集合来管理访问策略,同时检查当前已验证的用户是否具有相同的权限,并仅在这种情况下向用户显示插件。 - Rati_Ge

2
这篇文章(链接)详细介绍了使用AOP将安全问题注入到MEF中。 这可能是实现这一目标的一种方式——我在MEF中没有找到其他可以实现此功能的方法。

0

我认为PRISM可以完全实现您所描述的功能。请查看这篇Code Project文章。您可以根据用户权限创建多个模块目录,并按照此处所述从XML动态加载目录:

var catalog = ModuleCatalog.CreateFromXaml(new Uri("catalog.xaml", 
                                                 UriKind.Relative));

我不使用PRISM,并且我们的项目也没有计划使用它。由于这是一个真正的企业系统,我们从头开始构建许多东西。 - Rati_Ge

0
我在WPF/MVVM中使用Cinch和后端SQL表格来实现了这个功能,将控件映射到角色和视图权限。这样你可以通过viewmodel控制权限,并且在任何时候改变可见性。
Cinch能够帮助你减少MVVM的一些繁琐工作,同时允许你通过MeffedMVVM或Prism来利用MEF。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接