1.5.2.1.3. 插件开发实现主菜单扩展

1.5.2.1.3.1. 主菜单定义

在插件的Spring配置文件中增加下面的bean定义来增加主菜单。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
    <bean parent="pluginMainMenu">
        <!-- 主菜单ID,唯一的数字串 -->
        <property name="id" value="1111111111" />
        <!-- 主菜单名称 -->
        <property name="name" value="NC组织数据同步" />
        <!-- 主菜单排序号 -->
        <property name="sortId" value="1" />
        <!-- 二级菜单 -->
        <property name="children">
            <list>
                <bean class="com.seeyon.ctp.plugin.PluginMenu">  
                    <!-- 二级菜单ID,唯一的数字串 -->
                    <property name="id" value="1111111112" />
                    <!-- 二级菜单名称 -->
                    <property name="name" value="菜单权限控制" />                
                    <!-- 菜单打开方式 mainfrm:工作区; newWindow:新窗口-- >
                    <property name="target" value="mainfrm" />
                    <!-- 菜单图标 -->
                    <property name="icon" value="/apps_res/plugin/nc/images/2401.gif" />
                    <!-- 菜单地址,出于安全方面考虑此url必须是协同内部界面,如果想跳转请在内部界面实现跳转 -->
                    <property name="url" value="/index/indexController.do?method=searchAll" />
                    <!-- 菜单访问权限的验证类 -->
                    <property name="menuCheck">
                        <bean class="com.seeyon.ctp.menu.check.UserMenuCheck" />
                    </property>
                </bean>
            </list>
        </property>
        <!-- 菜单访问权限的验证类 -->
        <property name="menuCheck">
            <bean class="com.seeyon.ctp.menu.check.UserMenuCheck" />
        </property >
    </bean>
</beans>

每一个插件定义的菜单都是独立的主菜单,暂不支持在指定位置添加子菜单项。

1.5.2.1.3.2. 主菜单权限控制

实现一个AbstractMenuCheck的实现类,通过传入的登录人员信息控制是否显示, 并配置到菜单定义的XML中。

集团管理员菜单权限控制代码示例:

package com.seeyon.ctp.menu.check;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class GroupAdminMenuCheck extends AbstractMenuCheck {

    private static final Log log = LogFactory.getLog(GroupAdminMenuCheck.class);
    
    @Override
    public boolean check(long memberId, long loginAccountId) {
        boolean isAdmin = false;
        //TODO判断是否是集团管理员
        return isAdmin;
    }
}

为了支持原有的userMenus、groupMenus、accountMenus、systemMenus等特性,系统缺省提供以下几个MenuCheck :

  1. com.seeyon.ctp.menu.check.GroupAdminMenuCheck 集团管理员菜单权限校验

  2. com.seeyon.ctp.menu.check.AccountAdminMenuCheck 单位管理员菜单权限校验

  3. com.seeyon.ctp.menu.check.SystemAdminMenuCheck 系统管理员菜单权限校验

  4. com.seeyon.ctp.menu.check.AuditAdminMenuCheck 审计管理员菜单权限校验

  5. com.seeyon.ctp.menu.check.UserMenuCheck 非管理员菜单权限校验(普通用户)

  6. com.seeyon.ctp.menu.check.MenuForAllUsersChecker 针对所有用户菜单全部验证通过