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源码分析二十二:Navigation的更多相关文章
- ABP源码分析三十二:ABP.SignalR
Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...
- ABP源码分析四十二:ZERO的身份认证
ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展.同时重写了ABP核心模块中的permission功能,以实现 ...
- spark 源码分析之十二 -- Spark内置RPC机制剖析之八Spark RPC总结
在spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRpcEnv中,剖析了NettyRpcEnv的创建过程. Dispatcher.NettyStreamManager.T ...
- ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
- ABP源码分析三十:ABP.RedisCache
ABP 通过StackExchange.Redis类库来操作Redis数据库. AbpRedisCacheModule:完成ABP.RedisCache模块的初始化(完成常规的依赖注入) AbpRed ...
- ABP源码分析三十五:ABP中动态WebAPI原理解析
动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...
- ABP源码分析三十六:ABP.Web.Api
这里的内容和ABP 动态webapi没有关系.除了动态webapi,ABP必然是支持使用传统的webApi.ABP.Web.Api模块中实现了一些同意的基础功能,以方便我们创建和使用asp.net w ...
- ABP源码分析三十九:ABP.Hangfire
ABP对HangFire的集成主要是通过实现IBackgroundJobManager接口的HangfireBackgroundJobManager类完成的. HangfireBackgroundJo ...
- ABP源码分析四十:ZERO的Application和Tenant
ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, ses ...
- ABP源码分析四十四:ZERO的配置
ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig ...
随机推荐
- Fis3前端工程化之项目实战
Fis3项目 项目目录结构: E:. │ .gitignore │ fis-conf.js │ index.html │ package.json │ README.md │ ├─material │ ...
- 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表
1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免.所以今天就给大家分享一个自定义的做日期表的方法 ...
- 如何一步一步用DDD设计一个电商网站(二)—— 项目架构
阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的 ...
- Node.js:理解stream
Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...
- C语言动态走迷宫
曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函 ...
- 深入理解 JavaScript,以及 Linux 下的开发调试工具
前言 JavaScript 是我接触到的第二门编程语言,第一门是 C 语言.然后才是 C++.Java 还有其它一些什么.所以我对 JavaScript 是非常有感情的,毕竟使用它有十多年了.早就想写 ...
- "NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案
今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...
- interpreter(解释器模式)
一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用 ...
- MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
[转自网络]https://my.oschina.net/cers/blog/292191 PK Belongs to primary key 作为主键 NN Not Null 非空 UQ Uniqu ...
- SQL Server常见问题介绍及快速解决建议
前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题.这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 下面一些问题是 ...