按用户权限控制WPF中的模块导出

本文关键字:模块 WPF 用户 权限 控制 | 更新日期: 2023-09-27 18:20:15

我正在开发一个基于模块的WPF应用程序,我很好奇是否有使用用户权限控制模块导出的选项?我有两个用户使用带有3个模块的应用程序,每个用户都有权查看或不查看这些模块,例如1。用户只能看到前2个模块,第二个只能看到1个模块。和3。单元权限存储在数据库中,在同步过程中下载,并存储在xml配置文件中(我认为这并没有问题)。模块在每个模块项目中导出为:[Export(typeof(MyBestViewModule))]。或者可能还有其他方法可以通过用户权限控制这些模块?最佳实践或更好的东西,也许有人已经做了,可以分享经验和想法,因为我不在其中。

按用户权限控制WPF中的模块导出

假设您使用的是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);