1. public class LearningMpaAbpNavigationProvider : NavigationProvider
  2. {
  3. public override void SetNavigation(INavigationProviderContext context)
  4. {
  5. context.Manager.MainMenu
  6. .AddItem(
  7. new MenuItemDefinition(
  8. "Home",
  9. L("HomePage"),
  10. url: "",
  11. icon: "fa fa-home",
  12. requiresAuthentication: true
  13. )
  14. ).AddItem(
  15. new MenuItemDefinition(
  16. "Tenants",
  17. L("Tenants"),
  18. url: "Tenants",
  19. icon: "fa fa-globe",
  20. requiredPermissionName: PermissionNames.Pages_Tenants
  21. )
  22. ).AddItem(
  23. new MenuItemDefinition(
  24. "Users",
  25. L("Users"),
  26. url: "Users",
  27. icon: "fa fa-users",
  28. requiredPermissionName: PermissionNames.Pages_Users
  29. )
  30. ).AddItem(
  31. new MenuItemDefinition(
  32. "About",
  33. L("About"),
  34. url: "About",
  35. icon: "fa fa-info"
  36. )
  37. );
  38. }
  39.  
  40. }

  该文件中默认定义了Home、Tenants、Users、About四个菜单

1、Home菜单设置了requiresAuthentication: true,即只有登陆后才会显示该菜单。

2、Tenants和Users菜单设置了requiredPermissionName属性,即用户具有指定的权限时才显示菜单。

3、About菜单没有限制,默认显示。

注:每一个菜单项都是一个MenuItemDefinition,其中主要包括Name(唯一名称),DisplayName(本地化显示名称),Url(菜单跳转),Icon(指定菜单图标)。

一、内菜单

二、外菜单

  1. .AddItem(
  2. new MenuItemDefinition(
  3. "DictionaryManager",
  4. L("信息导入"),
  5. url: "#DictionaryManager",
  6. icon: "fa fa-info",
  7. requiresAuthentication: true
  8. ).AddItem(
  9. new MenuItemDefinition(
  10. "Law",
  11. L("学生数据"),
  12. url: "#Law",
  13. icon: "fa fa-info",
  14. requiresAuthentication: true)
  15. )
  16. );

  

三、权限菜单

1、.Core->Authorization文件夹->AppPermissions类内添加权限码

  1. public const string Pages_BasicDataExport = "Pages.BasicDataExport";

  

规范 Pages.下 一级的

二级的则是

public const string Pages_BasicDataExport = "Pages.BasicDataExport.Edit";

public const string Pages_BasicDataExport = "Pages.BasicDataExport.Update";

2、.Core->Authorization文件夹->AppAuthorizationProvider类内添加进行创建菜单

  1. // 创建权限
  2. var per = context.CreatePermission(AppPermissions.Pages_BasicDataExport, L("BasicDataExport"));

做完就会出现在tree 权限数里

 这里两个参数 AppPermissions.Pages_BasicDataExport   就是权限菜单码唯一标识     L("BasicDataExport")   则是 .Core->Localization->CloudTimeTable->语言包里面的name编码

3、 

  1. .AddItem(
  2. new MenuItemDefinition(
  3. "DictionaryManager",
  4. L("信息导入"),
  5. url: "#DictionaryManager",
  6. icon: "fa fa-info",
  7. permissionDependency: new SimplePermissionDependency(AppPermissions.Pages_BasicDataExport)
  8. ).AddItem(
  9. new MenuItemDefinition(
  10. "Law",
  11. L("学生数据"),
  12. url: "#Law",
  13. icon: "fa fa-info",
  14. requiresAuthentication: true)
  15. )
  16. );

  

注意:L()里面写字符标识 在 比如      L("BasicsExport"),           本地化配置中     <text name="BasicsExport" value="信息导入" />

四、菜单控制器操作视图展示

都在.MVC层->Areas文件夹->AppAreaName文件夹

按钮生成的代码

  1. .AddItem(
  2. new MenuItemDefinition(
  3. "DictionaryManager",
  4. L("BasicsExport"),
  5. url: "#DictionaryManager",
  6. icon: "fa fa-info",
  7. permissionDependency: new SimplePermissionDependency(AppPermissions.Pages_BasicDataExport)
  8. ).AddItem(
  9. new MenuItemDefinition(
  10. "Law",
  11. L("ClassroomInfo"),
  12. url: "AppAreaName/StudentInfo",
  13. icon: "fa fa-info",
  14. requiresAuthentication: true)
  15. )
  16. .AddItem(
  17. new MenuItemDefinition(
  18. "Law",
  19. L("TeacherInfo"),
  20. url: "#Law",
  21. icon: "fa fa-info",
  22. requiresAuthentication: true)
  23. )
  24. .AddItem(
  25. new MenuItemDefinition(
  26. "Law", //一个常量,控制菜单是否被选中
  27. L("StudentInfo"), //菜单显示名称,在语言文件中配置
  28. url: "AppAreaName/StudentInfo", //菜单路径
  29. icon: "fa fa-info", //菜单图标
  30. requiresAuthentication: true)
  31. )
  32. .AddItem(
  33. new MenuItemDefinition(
  34. "Law",
  35. L("CourseInfo"),
  36. url: "#Law",
  37. icon: "fa fa-info",
  38. requiresAuthentication: true)
  39. )
  40. );

控制器的代码

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Abp.AspNetCore.Mvc.Authorization;
  6. using Microsoft.AspNetCore.Mvc;
  7. using YD.CloudTimetable.Authorization;
  8. using YD.CloudTimetable.Web.Controllers;
  9.  
  10. namespace YD.CloudTimetable.Web.Mvc.Areas.AppAreaName.Controllers
  11. {
  12. [Area("AppAreaName")]
  13. [AbpMvcAuthorize(AppPermissions.Pages_BasicDataExport)]
  14. public class StudentInfoController : CloudTimetableControllerBase
  15. {
  16. public ActionResult Index()
  17. {
  18. return View();
  19. }
  20. }
  21. }

  

前端代码

  1. @using Abp.Application.Services.Dto
  2. @using YD.CloudTimetable.Authorization
  3. @using YD.CloudTimetable.Web.Areas.AppAreaName.Models.Roles
  4. @using YD.CloudTimetable.Web.Areas.AppAreaName.Startup
  5. @model RoleListViewModel
  6. @{
  7. ViewBag.CurrentPageName = AppAreaNamePageNames.Common.Roles;
  8. }
  9.  
  10. @section Scripts
  11. {
  12. <script abp-src="/view-resources/Areas/AppAreaName/Views/_Bundles/role-list.js" asp-append-version="true"></script>
  13. }
  14.  
  15. hello

注意:菜单未被选中

三步骤

1、.mvc->Areas->AppAreaName->Startup->AppAreaNameNavigationProvider.cs类内

更改json菜单的生成

  1. .AddItem(
  2. new MenuItemDefinition(
  3. "DictionaryManager",
  4. L("BasicsExport"),
  5. url: "#DictionaryManager",
  6. icon: "fa fa-info",
  7. permissionDependency: new SimplePermissionDependency(AppPermissions.Pages_BasicDataExport)
  8. ).AddItem(
  9. new MenuItemDefinition(
  10. "Law",
  11. L("ClassroomInfo"),
  12. url: "AppAreaName/StudentInfo",
  13. icon: "fa fa-info",
  14. requiresAuthentication: true)
  15. )
  16. .AddItem(
  17. new MenuItemDefinition(
  18. "Law",
  19. L("TeacherInfo"),
  20. url: "#Law",
  21. icon: "fa fa-info",
  22. requiresAuthentication: true)
  23. )
  24. .AddItem(
  25. new MenuItemDefinition(
  26. AppAreaNamePageNames.Common.BasicData, //这里建立一个常量标识 控制菜单是否被选中
  27. L("StudentInfo"),
  28. url: "AppAreaName/StudentInfo",
  29. icon: "fa fa-info",
  30. requiresAuthentication: true)
  31. )
  32. .AddItem(
  33. new MenuItemDefinition(
  34. "Law",
  35. L("CourseInfo"),
  36. url: "#Law",
  37. icon: "fa fa-info",
  38. requiresAuthentication: true)
  39. )
  40. );

2、常量在

  .mvc->Areas->AppAreaName->Startup->AppAreaNamePageNames.cs类内

  1. public const string BasicData = "BasicData.StudentInfo";
  2.  
  3. BasicDataStudentInfo 目前不知是不是随便创建的-具体参考其他变量

3、视图

  

  1. @using YD.CloudTimetable.Web.Areas.AppAreaName.Startup
  2. @{
  3. ViewBag.CurrentPageName = AppAreaNamePageNames.Common.BasicData;
  4. //上面所定义就是这个常量,作用就是选中菜单时会高亮
  5. }
  6.  
  7. hello

  

 

五、权限过滤

https://blog.csdn.net/wangwengrui40/article/details/86677672

ABP 番外篇-菜单的更多相关文章

  1. ABP 番外篇-容器

    一. @using YD.CloudTimetable.Web.Areas.AppAreaName.Startup @{ ViewBag.CurrentPageName = AppAreaNamePa ...

  2. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  3. 可视化(番外篇)——SWT总结

    本篇主要介绍如何在SWT下构建一个应用,如何安装SWT Designer并破解已进行SWT的可视化编程,Display以及Shell为何物.有何用,SWT中的常用组件.面板容器以及事件模型等. 1.可 ...

  4. 番外篇--Moddule Zero多租户管理

    番外篇--Moddule Zero多租户管理 2.1.1 关于多租户 强烈建议阅读这个文件前阅读多租户文档. 2.1.2 启用多租户 ASP.NET Boilerplate和module-zero可以 ...

  5. iOS冰与火之歌(番外篇) - 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权

    iOS冰与火之歌(番外篇) 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权 蒸米@阿里移动安全 0x00 序 这段时间最火的漏洞当属阿联酋的人权活动人士被apt攻击所使用 ...

  6. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  7. 可视化(番外篇)——在Eclipse RCP中玩转OpenGL

    最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl绘图的想法,网上有博文详细介绍这方面的内容, ...

  8. 【重走Android之路】【番外篇】关于==和equals

    [重走Android之路][番外篇]关于==和equals   在实际的编程当中,经常会使用==和equals来判断变量是否相同.但是这两种比较方式也常常让人搞得云里雾里摸不着头脑.下面是我个人做的总 ...

  9. 【重走Android之路】【番外篇】有关于null的一些知识点

    [重走Android之路][番外篇]有关于null的一些知识点   1.首先,到底什么是null? null是Java中的一个关键字,用于表示一个空对象引用,但其本身并不是任何类型也不是属于任何对象. ...

随机推荐

  1. Flask-SQLAlchemy常用操作

    一.SQLAlchemy介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数 ...

  2. 模拟祭-比萨-题解O(n)

    题目描述 233233 [ 233 ] ( 233 ) KikokKikok 得到了一块比萨,他迫不及待地想与妹妹 Kik子和 koko美一同享用它. 比萨是一种圆形的食物.为了将它分给三个人,Kik ...

  3. Linux VNC安装

    cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) uname -r 3.10.0-693.el7.x86_64 VNC下载:ht ...

  4. mysql 实现树形的遍历

    前言:关于多级别菜单栏或者权限系统中部门上下级的树形遍历,oracle中有connect by来实现,mysql没有这样的便捷途径,所以MySQL遍历数据表是我们经常会遇到的头痛问题,下面通过存储过程 ...

  5. Linux并发与同步专题 (3) 信号量

    关键词:Semaphore.down()/up(). <Linux并发与同步专题 (1)原子操作和内存屏障> <Linux并发与同步专题 (2)spinlock> <Li ...

  6. OPPO Developers Conference(2018.12.26)

    时间:2018.12.26地点:北京国家会议中心

  7. Item 26: 避免对universal引用进行重载

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果你需要写一个以名字作为参数,并记录下当前日期和 ...

  8. Python做windows服务

    Python做windows服务(多进程服务),并结束多进程 Python中_,__,__xx__的区别 在注册MyWinService服务时,再使用 "sc delete 服务器名称&qu ...

  9. Python中的鸡肋多线程

    作者:DarrenChan陈驰链接:https://www.zhihu.com/question/23474039/answer/269526476来源:知乎著作权归作者所有.商业转载请联系作者获得授 ...

  10. js处理ajax返回的json数组

    一.json对象和json数组的区别 jsonObject = {} # json对象 jsonArray=[{},{}] # json数组 二.数据处理 前台接收到后台传过来的json数组实际上是一 ...