package com.gx.example.itemapply.web.action;

import com.gx.webpage.engine.pagesecurityengine.api.PageSecurityEngineApi;
import com.gx.webpage.component.model.*;
import java.util.*;
import javax.servlet.http.*;

/**
 * 用来进行页面安全控制的类
 * 
 * @author Administrator
 * 
 */
public class ApplySecurity implements PageSecurityEngineApi {
	/**
	 * 根据组件和组件的数据，来判断某个访问者对组件有什么样的访问权限。
	 * 主要是：只读、可读、可写、不可访问,用AbstractComponentModel的isShow、isCanModify、isDeleted、isViewModel
	 * 来组合描述。 所以本方法就是对每一个组件进行判断，然后设置每一个组件的访问权限
	 * 
	 * @param request
	 *            客户端请求request
	 * @param userId
	 *            访问者Id
	 * @param cm
	 *            组件模型
	 * @param wpdm
	 *            页面数据模型
	 * @param index
	 *            组件对应数据的索引
	 * @return 设置了权限的组件模型
	 * @throws Exception
	 */
	public AbstractComponentModel setSecurityWebPageModel(
			HttpServletRequest request, String userId,
			AbstractComponentModel cm, WebPageDbModel wpdm, int index)
			throws Exception {
		// 这里应该根据传入的值，到真正的权限模块里面去判断
		// 简单示例如下
		//获取组件对应的真实值
		String v = cm.getTrueValue(request, wpdm, cm.getTrueDbColumnId(),
				index, false);
		// 值为11的为不显示；15的为不可修改；22的为只显示值，33的为从页面删除
		if (v != null && v.equals("11")) {
			cm.setIsShow(false);
		}
		if (v != null && v.equals("15")) {
			cm.setIsCanModify(false);
		}
		if (v != null && v.equals("22")) {
			cm.setIsViewModel(true);
		}
		if (v != null && v.equals("33")) {
			cm.setIsDeleted(true);
		}

		return cm;
	}

	/**
	 * 判断访问者能否访问某个页面
	 * 
	 * @param userId
	 *            访问者id
	 * @param pageUuid
	 *            页面号
	 * @param needException
	 *            如果不能访问，是否需要报错
	 * @return true-能访问，false-不能访问
	 * @throws Exception
	 */
	public boolean canViewThePage(String userId, String pageUuid,
			boolean needException) throws Exception {
		return true;
	}
}
