Skip to content

Commit

Permalink
Enable that all users can list procedure roles
Browse files Browse the repository at this point in the history
  • Loading branch information
craigtaverner committed Oct 27, 2016
1 parent ac8ea6a commit d7e7d48
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 32 deletions.
Expand Up @@ -174,7 +174,7 @@ public Stream<ProcedureResult> listProcedures()
{
return graph.getDependencyResolver().resolveDependency( Procedures.class ).getAllProcedures().stream()
.sorted( ( a, b ) -> a.name().toString().compareTo( b.name().toString() ) )
.map( sig -> new ProcedureResult( sig, isAdmin() ) );
.map( sig -> new ProcedureResult( sig ) );
}

@SuppressWarnings( "WeakerAccess" )
Expand All @@ -185,33 +185,26 @@ public static class ProcedureResult
public final String description;
public final List<String> roles;

public ProcedureResult( ProcedureSignature signature, boolean isAdmin )
public ProcedureResult( ProcedureSignature signature )
{
this.name = signature.name().toString();
this.signature = signature.toString();
this.description = signature.description().orElse( "" );
if ( isAdmin )
roles = new ArrayList<>();
switch ( signature.mode() )
{
roles = new ArrayList<>();
switch ( signature.mode() )
{
case DBMS:
roles.add( "admin" );
break;
case READ_ONLY:
roles.add( "reader" );
case READ_WRITE:
roles.add( "publisher" );
case SCHEMA_WRITE:
roles.add( "architect" );
default:
roles.add( "admin" );
roles.addAll( Arrays.asList( signature.allowed() ) );
}
}
else
{
roles = Collections.emptyList();
case DBMS:
roles.add( "admin" );
break;
case READ_ONLY:
roles.add( "reader" );
case READ_WRITE:
roles.add( "publisher" );
case SCHEMA_WRITE:
roles.add( "architect" );
default:
roles.add( "admin" );
roles.addAll( Arrays.asList( signature.allowed() ) );
}
}
}
Expand Down
Expand Up @@ -253,7 +253,16 @@ public void shouldShowAllowedRolesWhenListingProcedures() throws Throwable
"dbms.procedures", newSet( ADMIN ),
"dbms.listQueries", newSet( ADMIN ),
"dbms.security.createUser", newSet( ADMIN ) );
assertSuccess( adminSubject, "CALL dbms.procedures", itr ->

assertListProceduresHasRoles( adminSubject, expected );
assertListProceduresHasRoles( schemaSubject, expected );
assertListProceduresHasRoles( writeSubject, expected );
assertListProceduresHasRoles( writeSubject, expected );
}

private void assertListProceduresHasRoles(S subject, Map<String,Set<String>> expected)
{
assertSuccess( subject, "CALL dbms.procedures", itr ->
{
List<String> failures = itr.stream().filter( record ->
{
Expand All @@ -268,13 +277,5 @@ public void shouldShowAllowedRolesWhenListingProcedures() throws Throwable

assertThat( "Expectations violated: " + failures.toString(), failures.isEmpty() );
} );

assertSuccess( schemaSubject, "CALL dbms.procedures", itr ->
{
List<String> failures = itr.stream().filter( record ->
!((List<?>) record.get( "roles" )).isEmpty() ).map( record ->
record.get( "name" ).toString() ).collect( toList() );
assertThat( "Some procedures listed roles: " + failures.toString(), failures.isEmpty() );
} );
}
}

0 comments on commit d7e7d48

Please sign in to comment.