Foxnic-Web —— 可插拔模块的菜单控制

LeeFJ
• 阅读 369
Foxnic-Web —— 可插拔模块的菜单控制
概述

  Foxnic-Web 的设计就是业务模块下 Maven 依赖层面可插拔,即只要把对应的模块加入启动项目的 Maven 依赖中那么启动项目就拥有了插入模块的功能,反之亦然。因此,在 Foxnic-Web 的业务模块(Maven Module) 中需要做一些特殊处理,使业务模块插拔时同时体现在菜单上。

  本文中的示例代码均可在 https://gitee.com/LeeFJ/foxnic-samples 项目中找到。

菜单控制

  Foxnic-Web 在每个业务模块组的 Service 层需要引入 ModuleAuthority 类的子类,如图所示:

Foxnic-Web —— 可插拔模块的菜单控制

  用这个类的 getAuthorities 方法返回其所在模块的菜单权限Key,代码如下所示:

@Component
public class ContractAuthority extends ModuleAuthority {
    /**
     * 返回最顶层菜单的权限Key
    * */
    @Override
    public String[] getAuthorities() {
        return new String[] {
            // 合同管理
            "contract"
        };
    }
}

  以上代码在 getAuthorities 方法中返回一个数组,这个数组包含当前模块所涉及的菜单的最顶层菜单的权限Key,权限Key在菜单管理定义,如图所示:

Foxnic-Web —— 可插拔模块的菜单控制

  配置完毕,启动应用后就可以获得对应的菜单,如图所示:

Foxnic-Web —— 可插拔模块的菜单控制

Foxnic-Web —— 可插拔模块的菜单控制

参数配置

  然而,有些时候我们希望这种菜单按模块插拔是可控的。在非生产环境,我们希望展示所有的菜单,而在生成环境我们希望只展示已经插入的模块的菜单。

  菜单展示的位置主要有两个地方,一个是首页,另外一个是菜单管理以及角色管理选择权限时展示的菜单。所以,Foxnic-Web 通过两个参数控制这两个位置,如图所示:

Foxnic-Web —— 可插拔模块的菜单控制

  修改参数的配置值,重新登录后即可生效。

小结

  通过本节,可以了解到 Foxnic-Web 的模块是可插拔的,而且通过参数控制,菜单也可随已插入的模块动态发生改变。

相关项目

  https://gitee.com/LeeFJ/foxnic

  https://gitee.com/LeeFJ/foxnic-web

  https://gitee.com/lank/eam

  https://gitee.com/LeeFJ/foxnic-samples

官方文档

  http://foxnicweb.com/docs/doc.html

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java面试总结1
1.自我介绍:我是\\\工作了\\年先后在\\公司和\\公司工作先后做过\\和\\项目2.简单介绍一下\\项目为了解决\\问题,开发了\\系统,该系统主要由\\部分组成我参与了\\模块的开发简单说一下该模块的业务及设计简单介绍一下项目的整体架构,根据所在模块
LeeFJ LeeFJ
1年前
Foxnic-Web —— 模块的多版本支持
站在产品角度,如何满足不同客户的需求定制?如何积累丰富的业务功能,尽可能复用避免重复开发?针对最近实施的几个客户,FoxnicWeb为模块增加了多版本特性,在一定程度上解决了甲方需求的多样性和差异性。  FoxnicWeb模块多版本主要是从UI界面和Service层着手。
待兔 待兔
2年前
面向对象设计原则之 - 低耦合
耦合到底是什么?耦合(或者称为依赖)是程序模块之间的依赖程度。从定义上看,耦合和内聚是相反的:内聚关注模块内部的元素的结合程度耦合关注模块之间的依赖程度理解耦合的关键有两点:什么是模块?模块和内聚里面提到的模块是一样的,耦合中的模块其实也是可大可小的。常见的模块有函数,类,包,子模块,子系统等什么是依赖?依赖这个词很好理解,通俗地讲,就是
Stella981 Stella981
3年前
Maven多模块下,扫描不到子模块mybatis xml文件的解决方法
有一个Maven项目, 里面有common模块和主模块, 其中common模块中有若干个mybatis的mapper和xml, 结果主模块调用其mapper时提示出错, 原因是找不到mapper对应的xml映射关系.         查资料得知, 主模块的application.yml里面,配置mybatis的mapperlocations时, 用的是
Stella981 Stella981
3年前
Openresty常用指令和参数
参考文档:https://www.nginx.com/resources/wiki/modules/lua/nginxapiforluaNginxLua模块指令:Nginx共11个处理阶段,而相应的处理阶段是可以做插入式处理,即可插拔式架构;另外指令可以在http、serve
Stella981 Stella981
3年前
ES6 模块化(Module)export和import详解
ES6模块化(Module)export和import详解ES6在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。ES6模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS和AMD模块,都只能
Wesley13 Wesley13
3年前
maven父子模块jar包管理和spring boot
maven父子模块jar包管理和springboot项目结构:parent父模块空maven项目,用于管理子模块controllerservicedaomodelclient被其他项目依赖进行微服务内部调用(因下面问题导致client
Stella981 Stella981
3年前
Noark入门之异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时<br比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦0x00事件源一个实现xyz.noark.core.event
Stella981 Stella981
3年前
NPM关于package.json每次发布的时候都更新导致的问题
先来看看package.json中dependencies字段指定了项目运行所依赖的模块,devDependencies指定项目开发所需要的模块。它们都指向一个对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。 package.json文件里面的 devDependenci
Stella981 Stella981
3年前
Android模块化初体验及教程
Android模块化一直是Android开发届一个很火的话题,因为公司业务太多,代码越来越臃肿,越来越难维护,为了提升开发效率,减低代码的维护成本,所以采取了模块化开发方案。我们知道,模块化其实就是讲每个业务,拆分成每个独立的模块,然后通过某种协议来达到模块与模块之间的通信。一般公司的项目的结构大概的如下:!(h