Foxnic-Web —— 可插拔模块的菜单控制
概述
Foxnic-Web 的设计就是业务模块下 Maven 依赖层面可插拔,即只要把对应的模块加入启动项目的 Maven 依赖中那么启动项目就拥有了插入模块的功能,反之亦然。因此,在 Foxnic-Web 的业务模块(Maven Module) 中需要做一些特殊处理,使业务模块插拔时同时体现在菜单上。
本文中的示例代码均可在 https://gitee.com/LeeFJ/foxnic-samples 项目中找到。
菜单控制
Foxnic-Web 在每个业务模块组的 Service 层需要引入 ModuleAuthority 类的子类,如图所示:
用这个类的 getAuthorities 方法返回其所在模块的菜单权限Key,代码如下所示:
@Component
public class ContractAuthority extends ModuleAuthority {
/**
* 返回最顶层菜单的权限Key
* */
@Override
public String[] getAuthorities() {
return new String[] {
// 合同管理
"contract"
};
}
}
以上代码在 getAuthorities 方法中返回一个数组,这个数组包含当前模块所涉及的菜单的最顶层菜单的权限Key,权限Key在菜单管理定义,如图所示:
配置完毕,启动应用后就可以获得对应的菜单,如图所示:
参数配置
然而,有些时候我们希望这种菜单按模块插拔是可控的。在非生产环境,我们希望展示所有的菜单,而在生成环境我们希望只展示已经插入的模块的菜单。
菜单展示的位置主要有两个地方,一个是首页,另外一个是菜单管理以及角色管理选择权限时展示的菜单。所以,Foxnic-Web 通过两个参数控制这两个位置,如图所示:
修改参数的配置值,重新登录后即可生效。
小结
通过本节,可以了解到 Foxnic-Web 的模块是可插拔的,而且通过参数控制,菜单也可随已插入的模块动态发生改变。
相关项目
https://gitee.com/LeeFJ/foxnic
https://gitee.com/LeeFJ/foxnic-web
https://gitee.com/LeeFJ/foxnic-samples