/* ================================================================== * Created [2011-11-03 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.um.permission.filter; import java.util.Iterator; import java.util.List; import com.jinhe.tss.core.exception.BusinessException; import com.jinhe.tss.core.persistence.IEntity; import com.jinhe.tss.um.permission.PermissionHelper; /** * 某一树枝类型(包括所有子节点 或 包括所有父节点)的过滤拦截器。 * 如果发现对该树枝某一节点没有权限,则抛出异常。 * 一般用于停用、启用、删除等操作时的权限判断。 */ public class PermissionFilter4Branch implements IPermissionFilter { @Override public void doFilter(Object args[], Object returnValue, PermissionTag tag, PermissionHelper helper) { if(args.length < 2 || !(args[1] instanceof String)) return; List<?> resources = (List<?>) returnValue; String operation = (String) args[1]; List<Long> permitedResourceIds = helper.getResourceIdsByOperation(tag.application(), tag.resourceType(), operation); for( Iterator<?> it = resources.iterator(); it.hasNext(); ) { IEntity resource = (IEntity)it.next(); if( !permitedResourceIds.contains(resource.getId()) ) { throw new BusinessException("操作失败,您对被操作节点的子节点(或父节点)至少有一个没有相应操作权限!"); } } } }