我正在开发一个基于模块的WPF应用程序,我很好奇是否有一个选项来控制用户权限的模块导出?我有2个用户使用3个模块的应用程序,每个用户都有权看到或不看到这些模块,f.ex。1.用户只有权看到前2个模块,第二个有权只看到1。和3。模块。权限存储在数据库中,在同步过程中下载,并存储在xml配置文件中(我认为这没有问题)。在每个模块项目中,模块的导出方式如下:[Export(typeof(MyBestViewModule))]。或者,也许有其他方法可以通过用户权限来控制这些模块?最好的实践或更好的东西,也许有人已经做了,可以分享经验和想法,因为我已经退出了。
发布于 2015-11-02 18:54:26
假设您使用的是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);https://stackoverflow.com/questions/33475421
复制相似问题