List findPermissions()

in src/main/java/org/apache/directory/fortress/core/impl/PermDAO.java [1848:1941]


    List<Permission> findPermissions( Role role, boolean noInheritance ) throws FinderException
    {
        List<Permission> permList = new ArrayList<>();
        LdapConnection ld = null;
        String permRoot;

        boolean isAdmin = false;
        if ( role.getClass().equals( AdminRole.class ) )
        {
            permRoot = getRootDn( role.getContextId(), GlobalIds.ADMIN_PERM_ROOT );
            isAdmin = true;
        }
        else
        {
            permRoot = getRootDn( role.getContextId(), GlobalIds.PERM_ROOT );
        }
        try
        {
            String roleVal = encodeSafeText( role.getName(), GlobalIds.ROLE_LEN );
            StringBuilder filterbuf = new StringBuilder();
            filterbuf.append( GlobalIds.FILTER_PREFIX );
            filterbuf.append( PERM_OP_OBJECT_CLASS_NAME );
            filterbuf.append( ")(" );
            Set<String> roles = null;
            if( !noInheritance )
            {
                if ( role.getClass().equals( AdminRole.class ) )
                {
                    roles = AdminRoleUtil.getAscendants( role.getName(), role.getContextId() );
                }
                else
                {
                    roles = RoleUtil.getInstance().getAscendants( role.getName(), role.getContextId() );
                }
            }
            if ( CollectionUtils.isNotEmpty( roles ) )
            {
                filterbuf.append( "|(" );
                filterbuf.append( ROLES );
                filterbuf.append( "=" );
                filterbuf.append( roleVal );
                filterbuf.append( ")" );
                for ( String uRole : roles )
                {
                    filterbuf.append( "(" );
                    filterbuf.append( ROLES );
                    filterbuf.append( "=" );
                    filterbuf.append( uRole );
                    filterbuf.append( ")" );
                }
                filterbuf.append( ")" );
            }
            else
            {
                filterbuf.append( ROLES );
                filterbuf.append( "=" );
                filterbuf.append( roleVal );
                filterbuf.append( ")" );
            }

            filterbuf.append( ")" );
            ld = getAdminConnection();
            try ( SearchCursor searchResults = search( ld, permRoot,
                SearchScope.SUBTREE, filterbuf.toString(), PERMISSION_OP_ATRS, false, Config.getInstance().getInt(GlobalIds.CONFIG_LDAP_MAX_BATCH_SIZE, GlobalIds.BATCH_SIZE ) ) )
            {
                long sequence = 0;
                while ( searchResults.next() )
                {
                    permList.add( unloadPopLdapEntry( searchResults.getEntry(), sequence++, isAdmin ) );
                }
            }
            catch ( IOException e )
            {
                String error = "findPermissions caught IOException=" + e.getMessage();
                throw new FinderException( GlobalErrIds.PERM_ROLE_SEARCH_FAILED, error, e );
            }
            catch ( CursorException e )
            {
                String error = "findPermissions caught CursorException=" + e.getMessage();
                throw new FinderException( GlobalErrIds.PERM_ROLE_SEARCH_FAILED, error, e );
            }
        }
        catch ( LdapException e )
        {
            String error = "findPermissions caught LdapException=" + e;
            throw new FinderException( GlobalErrIds.PERM_ROLE_SEARCH_FAILED, error, e );
        }
        finally
        {
            closeAdminConnection( ld );
        }

        return permList;
    }