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;
}