【转】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源码分析系列文章目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库调优都涉及哪些方面

面试时&#xff0c;经常被问及 “数据库调优”的事情&#xff0c;心想这不是DBA的事吗&#xff0c;但回答不好还是显得不够专业&#xff0c;查一下资料&#xff0c;许多还真是程序员的事情&#xff0c;下面总结一下&#xff0c;希望对大家有所帮助。方面以影响程度排序 D1 业务…

node.js android 聊天,Node.js实现简单聊天服务器

使用Nodejs是如此简单的实现了一个简单的聊天服务器实现代码如下&#xff1a;var net require(net);var chatServer net.createServer(),clientList [];chatServer.on("connection",function(client){client.name client.remoteAddress ":" client.r…

【转】ABP源码分析二十三:Authorization

Permission&#xff1a;用于定义一个Permission&#xff0c;一个permission可以包含多个子Permission. PermissionDictionary&#xff1a;继承自Dictionary<string, Permission>类&#xff0c;很明显是一个用于存储permission对象的字典。 IPermissionDefinitionContext…

VI/VIM键盘图

转载于:https://www.cnblogs.com/sdjc/archive/2006/09/14/1949532.html

android确认密码代码,Android手机卫士之确认密码对话框

本文接着实现“确认密码”功能&#xff0c;也即是用户以前设置过密码&#xff0c;现在只需要输入确认密码布局文件和《Android 手机卫士--设置密码对话框》中的布局基本类似&#xff0c;所有copy一下&#xff0c;修改一点细节就搞定&#xff1a;android:layout_width"matc…

修改MD5加密 提高网站安全

发表文章 修改MD5加密 提高网站安全2006-08-28 16:23:55大 中 小特别说明&#xff1a;此种改变只能用于在刚开始建站时才可&#xff0c;如果你中途改变的话就会出现问题。   也许提到MD5时大家都很熟&#xff0c;但你真的是这样吗&#xff1f;了解其是如何进行散列的实际过…

【转】ABP源码分析二十四:Notification

NotificationDefinition: 用于封装Notification Definnition 的信息。注意和Notification 的区别&#xff0c;如果把Notification看成是具体的消息内容&#xff0c;NotificationDefinition则是对这个消息自身的定义&#xff08;可理解为消息的类型&#xff09;。 INotification…

一剪梅

红藕香残玉簟秋。轻解罗裳&#xff0c;独上兰舟。 云中谁寄锦书来&#xff1f;雁字回时&#xff0c;月满西楼。 花自飘零水自流。一种相思&#xff0c;两处闲愁。 此情无计可消除&#xff0c;才下眉头&#xff0c;却上心头。转载于:https://www.cnblogs.com/daitengfei/archive…

android手机 scala环境,在Android中使用Scala中的Java常量

我在Android上的Scala中开发了一个奇怪的问题。我正在使用sbt android插件&#xff0c;现在我正在尝试让内容提供商工作&#xff0c;但是...在Android中使用Scala中的Java常量刚刚用Scala替换了Java的数组代码。它看起来像这样&#xff1a;val projection Array(People.NAME,P…

【转】ABP源码分析二十五:EventBus

IEventData/EventData: 封装了EventData信息&#xff0c;触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册&#xff0c;注销和触发事件处理函数的方法。EventBus定义了一个Dictionary容器来存放事件和处理该事件的对象(其实不是对象而是Factory&#xf…

深入Atlas系列:Web Sevices Access in Atlas示例(4) - 使用HTTP GET调用Web Services方法...

在之前的例子里&#xff0c;由于Atlas客户端在调用Web Services方法时总是使用了Sys.Net.ServiceMethod类&#xff0c;因此始终使用了HTTP POST方法与服务器端进行交互。POST方法有其好处&#xff0c;不过GET方法也自有其价值。我们在使用Atlas进行Web Services调用时&#xff…

【转】ABP源码分析二十六:核心框架中的一些其他功能

本文是ABP核心项目源码分析的最后一篇&#xff0c;介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系。当然可以自定义的去实现IAbpSession使之与CLR的Session关联 IAbpSession&#xff1a;定义如下图中的四个属性。 NullAbpSessio…

CASE 语句

--简单case函数 USE pubsGOSELECT Category CASE type WHEN popular_comp THEN 计算机类 WHEN mod_cook THEN 现代厨艺 WHEN business THEN 商业图书 WHEN psychology THEN 心理学 WHEN trad_cook THEN 传统厨艺 ELS…

【转】ABP源码分析二十七:ABP.Entity Framework

IRepository&#xff1a;接口定义了Repository常见的方法 AbpRepositoryBase&#xff1a;实现了IRepository接口的常见方法 EfRepositoryBase:实现了AbpRepositoryBase中定义的抽象方法&#xff1a;GetAll&#xff0c;Insert&#xff0c;Delete&#xff0c;Update。在实际项目…

泛型实现List(ListT)排序

代码 publicclassPost : IComparable<Post>{ privatestringid string.Empty; privatestringtitle string.Empty; privateintorderby; publicstringID { get{ returnid; } set{ id value; } } pu…

华为鸿蒙与佳华,华为鸿蒙系统发布,带来三大好消息

华为在6月2日举办鸿蒙产品发布会&#xff0c;正式推出搭载鸿蒙操作系统的智能手机。这意味着此前只用于智慧屏、可穿戴设备等产品的鸿蒙操作系统终于覆盖到华为最主要的终端。从目前市场上的操作系统市场比例上看&#xff0c;安卓占据了全球68.63%&#xff0c;苹果占据了30.99%…

【转】ABP源码分析二十八:ABP.MemoryDB

这个模块简单&#xff0c;且无实际作用&#xff08;该模块用于支持ABP框架单元测试的&#xff09;。一般实际项目中都有用数据库做持久化&#xff0c;用了数据库就无法用这个MemoryDB 模块了。原因在于ABP限制了UnitOfWork的类型只能有一个(前文以作介绍)&#xff0c;一般用了数…

规定输出字段html,控制视图输出的包装字段内容的 HTML 标签《 Drupal 7 基础 (上) 》...

视图允许我们为分别定义用来包装字段内容&#xff0c;字段标签&#xff0c;还有字段内容和字段标签的 HTML 标签。这里我们先来看一下电影的标题字段&#xff0c;可以使用 Chrome 浏览器的开发者工具查看一下&#xff0c;鼠标放在其中的一个电影标题内容上&#xff0c;点击右键…

【转】ABP源码分析二十九:ABP.MongoDb

这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类&#xff0c;封装了对MongoDb数据库的操作。 这个module通过引用MongoDB.Driver&#xff0c;MongoDB.Bson&#xff0c;MongoDB.Driver.Core,MongoDB.Driver.Legacy类库来操作MongoDb. 当项目不需要依赖于关系型…

将自己的女朋友的话和视频做为启动音乐和启动动画(XP)

找到C:\windows\system32\oobe\images&#xff0c;可以看到3个wma文件&#xff0c;其中title.wma文件时xp的启动音乐&#xff0c;intro.wmv文件时xp的启动动画。哈哈&#xff0c;以后有女朋友了&#xff0c;只要替换一下文件&#xff0c;就可以把她的声音和视频设置在xp系统里。…