package cn.hmsoft.frame.control;

import cn.hmsoft.application.web.AjaxControl;
import cn.hmsoft.exception.web.LoginTimeoutException;
import cn.hmsoft.frame.data.model.FrameOptr;
import cn.hmsoft.frame.exception.BusinessException;
import cn.hmsoft.frame.exception.OptrAuthException;
import cn.hmsoft.frame.util.FrameParamUtil;

public class FrameControl extends AjaxControl {
	/*******************
	 * 获取系统操作员，并进行判断
	 */
	protected FrameOptr getFrameOptr() {
		return getFrameOptr(true);
	}

	/*******************
	 * 获取系统操作员，并根据参数选择是否进行判断
	 */
	protected FrameOptr getFrameOptr(boolean check) {
		FrameOptr optr = null;
		try {
			optr = (FrameOptr) this.getSession().getAttribute(FrameParamUtil.SessionName_FrameOptr);
		} catch (Exception e) {
		}
		if (check && optr == null) {
			throw new LoginTimeoutException();
		}
		return optr;
	}

	@Override
	public Object validRole() {
		if (this.getFrameOptr(true) == null)
			throw new LoginTimeoutException();
		return this.getFrameOptr(true);
	}

	/****************************
	 * 鉴权是否有某种资源的操作权限
	 */
	protected boolean authOptrRole(int res_id) {
		FrameOptr optr = this.getFrameOptr();
		if (optr.getOptr_id() == 0 || optr.getResMap().containsKey(res_id))
			return true;
		else
			throw new OptrAuthException();
	}

	protected boolean authAdminRole() {
		FrameOptr optr = this.getFrameOptr();
		if (optr.getOptr_id() != 0) {
			throw new BusinessException("该操作需要超级管理员权限！");
		}
		return true;
	}
}
