zoukankan      html  css  js  c++  java
  • ABP源码分析二十二:Navigation

    MenuDefinition:封装了导航栏上的主菜单的属性。

    MenuItemDefinition:封装了主菜单的子菜单的属性。子菜单可以引用其他子菜单构成一个菜单树

     

    UserMenu/UserMenuItem:封装了用于显示给用户的菜单/以及子菜单集合。 ABP通过MenuDefinition/MenuItemDefinition构成了完整的系统菜单集合(超集)。而UserMenu/UserMenuItem只构成用户所能访问的菜单集合,并且其DisplayName是本地化以后的DisplayName。

     

     

    INavigationManager:这个接口封装了一个字典类型的Menus和MenuDefinition类型的MainMenu。

     

     

    NavigationManager:实现了INavigationManager,运行时是一个单例对象。完成菜单集的初始化。navigationManager在Initialize方法中先从configuration中获取NavigationProvider派生类的type,然后通过容器生成该类型的实例,并调用NavigationProvider实例的SetNavigation完成菜单项的初始化。navigationManager的Initialize方法是在AbpKernelModule的PostInitialize方法中被调用的。

    INavigationProviderContext/NavigationProviderContext:上下文类,被用做方法的参数。这边只封装了INavigationManager对象

    NavigationProvider: 功能类似于FeatureProvider。抽象基类,用于设置NavigationManager的Menus和MainMenu(通过 INavigationProviderContext对象访问NavigationManager)。 Abp框架只提供了抽象类,下面代码是一个简单的示例。实际项目中可以创建自定义NavigationProvider来从数据库中读取Menu信息来填充到NavigationManager对象中。

    下面以SimpleTask项目为例: 该项目自定义了NavigationProvider的派生类,并且在module的preinitialize方法中将其注册到abp底层框架的configuration 中。

     

    INavigationConfiguration/NavigationConfiguration: NavigationManager通过具体的NavigationProvider来初始化Menus和MainMenu。但是ABP核心模块处于最底层,怎么能知道上层定义的NavigationProvider的类型呢? NavigationConfiguration为解决这个问题引入了NavigationProvider配置项。NavigationProvider就是一个Type 列表 (ITypeList<NavigationProvider>),注意是NavigationProvider的Type,不是实例。在需要NavigationProvider的地方,可以使用容器根据Type构造出实例。

     

     

    下面代码演示了怎么往ABP中添加具体的NavigationProvider

     

    IUserNavigationManager/UserNavigationManager: 通过INavigationManager的menus和用户信息,生成该用户可访问的菜单集合。主要检查两点:一是通过PermissionChecker检查一个用户是否拥有对某个菜单项的访问权限,另一项则是通过featurechecker检查一个用户所在的tenant是否有对该菜单项的访问权限。

     

     

     

    返回ABP源码分析系列文章目录

  • 相关阅读:
    【重大更新】Qlik Sense September 2018重磅发布(附下载)
    sharepoint多个NLB的web前段如何进行文件同步?
    通过组策略实现Firefox自动以当前域账号登录MOSS站点---(原创)
    EWS API 2.0读取日历信息-读取内容注意事项
    Dotfuscator混淆加密
    如何:在 SharePoint 中创建外部列表
    java学习笔记—HTTP协议(10)
    java学习笔记—Tomcat(9)
    java学习笔记DOM4J解析(7)
    php中mvc框架总结1(7)
  • 原文地址:https://www.cnblogs.com/1zhk/p/5356757.html
Copyright © 2011-2022 走看看