engine.checkPermission( next, userGroups, user.getJndiName(), user.getAuthenticationLevel(), dn,
engine.checkPermission( proxy, userGroups, user.getJndiName(), user.getAuthenticationLevel(), dn,
    private void checkLookupAccess( NextInterceptor next, LdapPrincipal user, Name dn, Attributes entry )            throws NamingException    {        Set userGroups = groupCache.getGroups( user.getName() );        Collection tuples = new HashSet();        addPerscriptiveAciTuples( tuples, dn, entry );        addEntryAciTuples( tuples, entry );        addSubentryAciTuples( tuples, dn, entry );        Collection perms = new HashSet();        perms.add( MicroOperation.READ );        perms.add( MicroOperation.BROWSE );        // check that we have read access to the entry        engine.checkPermission( next, userGroups, user.getJndiName(), user.getAuthenticationLevel(), dn, null,                null, perms, tuples, entry );        // check that we have read access to every attribute type and value        perms = Collections.singleton( MicroOperation.READ );        NamingEnumeration attributeList = entry.getAll();        while ( attributeList.hasMore() )        {            Attribute attr = ( Attribute ) attributeList.next();            for ( int ii = 0; ii < attr.size(); ii++ )            {                engine.checkPermission( next, userGroups, user.getJndiName(), user.getAuthenticationLevel(), dn,                        attr.getID(), attr.get( ii ), perms, tuples, entry );            }        }    }