后台菜单和权限是插件(二次)开发的最核心的部分,也是最难做到无缝整合的部分。大部分系统会将菜单信息保存到数据库中,这对升级和维护带来一定的困难。
Jspxcms的菜单和权限信息存放在配置中,方便管理、维护和升级;只需要在一个配置文件中设置好,即可以无缝整合系统的菜单、权限、赋权等问题,无需另外修改代码和页面。
开发时可以根据需要,将新功能菜单加到任意的一级菜单下的任意位置,也可以自己新增一级菜单,新增的一级菜单也可以放在任何你想要的位置上。
后台菜单分为两级,如内容管理、文件管理、用户权限、系统管理为一级菜单,文档管理、栏目管理、用户管理、角色管理为二级菜单。
后台菜单目前不支持三级。
/src/main/resources/conf/plugin/plug/menu.yml
菜单配置文件支持通配加载,符合classpath:conf/**/menu*.yml
这个规则的配置文件都会加载,系统中其它菜单的配置位于/src/main/resources/conf/menu.yml
。
加载菜单配置文件由com.jspxcms.core.MenuConfig
的appContext.getResources("classpath:conf/**/menu*.yml");
代码加载。
在/src/main/resources/conf/menu.yml
文件中有一级菜单的配置。
600:
name: navigation.plug
icon: fa fa-plug
perms: nav_plug
600:
菜单序号,决定一级菜单排列的位置。比如序号500的菜单会排在600的前面,而序号550则会排在500与600之间。注意:这个序号在所有的菜单配置文件中必须是唯一的,如果已经有600序号的菜单,则不能再建一个同样序号的菜单,可以为610或者558。name: navigation.plug
菜单名称。其中navigation.plug
是国际化代码,在/src/main/resources/messages
目录下的文件里有这个代码对应的中文。也可以直接写中文,如name: 我的菜单
。icon: fa fa-plug
菜单图标。其中fa fa-plug
是图标样式,请参考:https://getbootstrap.com/docs/3.3/components/。perms: nav_plug
权限值。一级菜单通常都是虚拟菜单,点击后只是展开二级菜单,不需要访问后台,所以权限值可以随意定义,只要不和原有权限值重复即可。在/src/main/resources/conf/plugin/plug/menu.yml
文件中有二级菜单的配置。
600-1000:
name: resume.management
url: plug/resume/list.do
perms: plug:resume:list
ops:
- create@plug:resume:create
- copy@plug:resume:copy
- edit@plug:resume:edit
- save@plug:resume:save
- update@plug:resume:update
- delete@plug:resume:delete
600-1100:
name: weixinMenu.management
url: plug/weixin_menu/list.do
perms: plug:weixin_menu:list
ops:
- save@plug:weixin_menu:save
600-1000
菜单序号。此处为两级,所以是二级菜单,其中600是一级菜单的序号,代表着二级菜单是属于序号为600的一级菜单之下。1000是二级菜单的序号,决定二级菜单排列的位置,这个序号在所属的一级菜单里必须是唯一的。注意:对应的一级菜单必须存在。name: resume.management
菜单名称。与一级菜单相同。url: plug/resume/list.do
菜单URL地址。点击这个菜单所访问的url。这是一个相对路径,以/cmscp/
为基础路径,所以这个地址实际上是/cmscp/plug/resume/list.do
。这个url地址必须要有相应Controller,否则点击这个菜单会找不到页面。如@RequestMapping("/plug/resume")
和@RequestMapping("list.do")
。perms: plug:resume:list
菜单权限值。这个权限值必须要对应url的Controller方法的@RequiresPermissions("plug:resume:list")
一致。ops:
按钮权限列表。一个模块除了点击菜单的权限,还有其他权限,比如点击简历管理
这个菜单链接后,里面还有新增简历、修改简历、删除简历等功能按钮。create@plug:resume:create
按钮权限值。create
是国际化代码。plug:resume:create
是权限值,必须与Controller方法中的@RequiresPermissions("plug:resume:create")
一致。也可以直接用中文,如新增@plug:resume:create
。对应的Java代码
package com.jspxcms.plug.web.back;
@Controller
@RequestMapping("/plug/resume")
public class ResumeController {
@RequiresPermissions("plug:resume:list")
@RequestMapping("list.do")
public String list(...) {
...
return "plug/resume/resume_list";
}
@RequiresPermissions("plug:resume:create")
@RequestMapping("create.do")
public String create(...) {
...
return "plug/resume/resume_form";
}
...
}
按照上面步骤配置菜单之后,角色管理的功能权限树会读取配置文件,无需修改角色管理页面及代码。