页面树结构
转至元数据结尾
转至元数据起始

1 概述

需求:

由于SmartBI不限制用户登陆移动设备的数量,客户需要限制一个用户最多只能够登陆不超过三台手机或者Pad设备。

实现方案:

      产品已经有 “移动设备管理“功能,只是产品的移动设备管理要么是手动要么是自动审核。这个插件使得用户接入的第一台设备自动审核,后面接入的设备手动审核。

      为实现该功能需要重写IPadPortalModule.java,在Spring上重新注册相同key的module到RMIModule,module的注册请见自定义Module

2 编写修改代码

重写IPadPortalModule.java

/**
 * @param ipadId 登录设备的ID,与登录用户无关
 * @return 最后执行的Access操作的字符串表示
 */
public String canAccessIPadModule(String ipadId) {
	RegisterInfo info = IPadDAOFactory.getRegisterInfoDAO().load(ipadId);
	// 若该设备为新设备,info为null
	// 此时没有任何用户通过该设备登录
	if (info == null) {
		// 获取所有注册信息
		List<RegisterInfo> rInfos = IPadDAOFactory.getRegisterInfoDAO().getAllRegisters();
		if (rInfos != null) {
			// flag用于统计当前用户等入的设备数
			int flag = 0;
			for (int i = 0; i < rInfos.size(); i++) {
				String rUser = rInfos.get(i).getRequestUser();
				IUser user = IPadPortalModule.getInstance().getStateModule().getCurrentUser();
				String cUser = user.getName();
				if (!StringUtil.isNullOrEmpty(user.getAlias())) {
					cUser += "(" + user.getAlias() + ")";
				}
				if (rUser.equals(cUser)) {
					flag++;
				}
			}
			LOG.info("flag:" + flag);
			// 该用户之前曾经在其他移动设备上登录,且设备数不超过3,允许登录
			if (flag > 0 && flag < 3) {
				return "requireRegister";
			}
			// 该用户在超过3台移动设备上登录,用户数超出限制注册失败
			if (flag >= 3) {
				return StringUtil.getLanguageValue("Ipad_Register_Error",
						CommonConfiguration.getInstance().getLocale());
			}
			// 该用户之前没有在移动设备上登录,自动审核通过
			if (flag == 0) {
				IPadDAOFactory.getRegisterInfoDAO().register(ipadId);
				return super.canAccessIPadModule(ipadId);
			}
		} else {
			// 自动审核通过
			IPadDAOFactory.getRegisterInfoDAO().register(ipadId);
			return super.canAccessIPadModule(ipadId);
		}
	} else {
		// 该设备已经登录(该状态登录用户无关)
		IUser user = IPadPortalModule.getInstance().getStateModule().getCurrentUser();
		String name = user.getName();
		if (!StringUtil.isNullOrEmpty(user.getAlias())) {
			name += "(" + user.getAlias() + ")";
		}
		String rName = info.getRequestUser();
		if (name.equals(rName)) {
			switch (info.getStatus()) {
				case ACCEPTED:
				case AUTO_ACCEPTED:
					return "true";
				case REJECTED:
					return "reject";
				case REQUEST:
					return "request";
			}
			return "faild";
		} else {
			return "faild";
		}
	}
	return "faild";
}

3 相关资源

该示例插件主要包含两个功能:

  1. 限制同一个用户登录设备数最多为3
    最大设备数写死在代码中,可以参考第三课:新增系统选项,创建一个修改该值的选项
    该插件只会限制通过移动端APP登录的用户,而不会限制通过移动端网页版登录的用户
  2. 限制外网通过Web访问报表系统

示例依赖了移动端扩展包ipad.ext,需要加载该扩展包,企业套件版已自带该扩展包。

示例代码:TKRSExample.zip

 

该示例代码来源于实际项目(EPPR-8003),下面为基于V6的原始代码,在V7上已经不能正常工作。修正版本见上方附件。

示例代码.rar

  • 无标签