首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按用户权限控制WPF中的模块导出

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

Stack Overflow用户
提问于 2015-11-02 18:25:59
回答 1查看 168关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2015-11-02 18:54:26

假设您使用的是MEF,那么有一种方法可以通过FilteredCatalog过滤模块

代码语言:javascript
复制
public class ViewModulesCatalog : FilteredCatalog
{
    public ViewModulesCatalog(ComposablePartCatalog inner, IPermissionsProvider permissionsProvider)
        : base(inner, part => part.ExportDefinitions.All(def => permissionsProvider.IsAllowed(def)))
}

其中IPermissionsProvider是您的自定义服务的合同,用于检查当前用户的权限。如下所示:

代码语言:javascript
复制
public interface IPermissionsProvider
{
    bool IsAllowed(ExportDefinition def);
}

更新

如果您使用的是Prism + MefBootstrapper,那么您已经覆盖了ConfigureAggregateCatalog方法

代码语言:javascript
复制
// 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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33475421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档