Attributes userEntry = next.lookup( userName );
Attributes userEntry = proxy.lookup( userName, Collections.singleton( "authorizationService" ) );
    public boolean hasPermission(            NextInterceptor next,             Collection userGroupNames, Name userName, AuthenticationLevel authenticationLevel,            Name entryName, String attrId, Object attrValue,            Collection microOperations, Collection aciTuples, Attributes entry ) throws NamingException    {        if( entryName == null )        {            throw new NullPointerException( "entryName" );        }                Attributes userEntry = next.lookup( userName );        // Determine the scope of the requested operation.        OperationScope scope;        if( attrId == null )        {            scope = OperationScope.ENTRY;        }        else if( attrValue == null )        {            scope = OperationScope.ATTRIBUTE_TYPE;        }        else        {            scope = OperationScope.ATTRIBUTE_TYPE_AND_VALUE;        }                // Clone aciTuples in case it is unmodifiable.        aciTuples = new ArrayList( aciTuples );        // Filter unrelated and invalid tuples        for( int i = 0; i < filters.length; i++ )        {            ACITupleFilter filter = filters[ i ];            aciTuples = filter.filter(                    aciTuples, scope, next,                    userGroupNames, userName, userEntry, authenticationLevel,                    entryName, attrId, attrValue, entry, microOperations );        }                // Deny access if no tuples left.        if( aciTuples.size() == 0 )        {            return false;        }        // Grant access if and only if one or more tuples remain and        // all grant access. Otherwise deny access.        for( Iterator i = aciTuples.iterator(); i.hasNext(); )        {            ACITuple tuple = ( ACITuple ) i.next();            if( !tuple.isGrant() )            {                return false;            }        }        return true;    }