code: public boolean match(Permission p) {
  		if(p instanceof AAFPermission) {
  			AAFPermission ap = (AAFPermission)p;
  			// Note: In AAF > 1.0, Accepting "*" from name would violate multi-tenancy
  			// Current solution is only allow direct match on Type.
  			// 8/28/2014 - added REGEX ability
  			if(type.equals(ap.getName()))  
  				if(PermEval.evalInstance(instance,ap.getInstance()))
  					if(PermEval.evalAction(action,ap.getAction()))
  						return true;
  		} else {
  			// Permission is concatenated together: separated by |
  			String[] aaf = p.getKey().split("[\\s]*\\|[\\s]*",3);
  			if(aaf.length>0 && type.equals(aaf[0]))
  				if(PermEval.evalInstance(instance,aaf.length>1?aaf[1]:"*"))
  					if(PermEval.evalAction(action,aaf.length>2?aaf[2]:"*"))
  						return true;
  		}				
  		return false;
  	}
docs: Match a Permission
  if Permission is Fielded type "Permission", we use the fields
  otherwise, we split the Permission with '|'
  
  when the type or action starts with REGEX indicator character ( ! ),
  then it is evaluated as a regular expression.
  
  If you want a simple field comparison, it is faster without REGEX