我正在开发一个基于模块的WPF应用程序,我很好奇是否有控制模块导出和用户权限的选项?
我有2个用户使用带有3个模块的应用程序,每个用户都有权查看或不查看这些模块,f.ex。 1.用户有权只查看前2个模块,第二个模块只有权查看1.和3.模块。
权限存储在数据库中并在同步过程中下载并存储在xml配置文件中(我认为没有问题)。
模块在每个模块项目中导出如:[Export(typeof(MyBestViewModule))]
。
或者也许还有其他方法可以通过用户权限来控制这些模块?最好的做法或更好的事情,也许有人已经做过,可以分享经验和想法,因为我已经不在了。
答案 0 :(得分:0)
假设你正在使用MEF,有一种方法可以通过FilteredCatalog
过滤模块:
public class ViewModulesCatalog : FilteredCatalog
{
public ViewModulesCatalog(ComposablePartCatalog inner, IPermissionsProvider permissionsProvider)
: base(inner, part => part.ExportDefinitions.All(def => permissionsProvider.IsAllowed(def)))
}
其中IPermissionsProvider
是您的自定义服务的合同,用于检查当前用户的权限。像这样:
public interface IPermissionsProvider
{
bool IsAllowed(ExportDefinition def);
}
<强>更新强>
如果您使用Prism + MefBootstrapper
,则覆盖方法ConfigureAggregateCatalog
:
// suppose assemblies with modules are located in "modules" subdir
var directoryCatalog = new DirectoryCatalog(@".\modules");
// let's filter directoryCatalog to get allowed modules
var permissionsProvider = // ... obtain provider reference here
var modulesCatalog = new ViewModulesCatalog(directoryCatalog, permissionsProvider);
return new AggregateCatalog(modulesCatalog);