@@ -1415,6 +1415,82 @@ public void testBuildUserPrivilegeResponse() {
14151415 }
14161416 }
14171417
1418+ public void testBuildUserPrivilegeResponseCombinesIndexPrivileges () {
1419+ final BytesArray query = new BytesArray ("""
1420+ {"term":{"public":true}}""" );
1421+ final Role role = Role .builder (RESTRICTED_INDICES , "test" , "role" )
1422+ .add (IndexPrivilegeTests .resolvePrivilegeAndAssertSingleton (Sets .newHashSet ("read" , "write" )), "index-1" )
1423+ .add (IndexPrivilege .ALL , "index-2" )
1424+ .add (
1425+ new FieldPermissions (new FieldPermissionsDefinition (new String [] { "public.*" }, new String [0 ])),
1426+ Collections .singleton (query ),
1427+ IndexPrivilege .MANAGE ,
1428+ true ,
1429+ "index-1" ,
1430+ "index-2"
1431+ )
1432+ .add (
1433+ new FieldPermissions (new FieldPermissionsDefinition (new String [] { "public.*" }, new String [0 ])),
1434+ Collections .singleton (query ),
1435+ IndexPrivilegeTests .resolvePrivilegeAndAssertSingleton (Sets .newHashSet ("read" , "write" )),
1436+ true ,
1437+ "index-2" ,
1438+ "index-1"
1439+ )
1440+ .add (
1441+ new FieldPermissions (new FieldPermissionsDefinition (new String [] { "public.*" }, new String [0 ])),
1442+ Collections .singleton (query ),
1443+ IndexPrivilegeTests .resolvePrivilegeAndAssertSingleton (Sets .newHashSet ("read_failure_store" , "manage_failure_store" )),
1444+ true ,
1445+ "index-2" ,
1446+ "index-1"
1447+ )
1448+ .add (
1449+ FieldPermissions .DEFAULT ,
1450+ null ,
1451+ IndexPrivilegeTests .resolvePrivilegeAndAssertSingleton (Sets .newHashSet ("read_failure_store" )),
1452+ false ,
1453+ "index-2" ,
1454+ "index-1"
1455+ )
1456+ .build ();
1457+
1458+ final GetUserPrivilegesResponse response = RBACEngine .buildUserPrivilegesResponseObject (role );
1459+
1460+ final GetUserPrivilegesResponse .Indices index1 = findIndexPrivilege (response .getIndexPrivileges (), Set .of ("index-1" ), false );
1461+ assertThat (index1 .getIndices (), containsInAnyOrder ("index-1" ));
1462+ assertThat (index1 .getPrivileges (), containsInAnyOrder ("read" , "write" ));
1463+ assertThat (index1 .getFieldSecurity (), emptyIterable ());
1464+ assertThat (index1 .getQueries (), emptyIterable ());
1465+
1466+ final GetUserPrivilegesResponse .Indices index2 = findIndexPrivilege (response .getIndexPrivileges (), Set .of ("index-2" ), false );
1467+ assertThat (index2 .getIndices (), containsInAnyOrder ("index-2" ));
1468+ assertThat (index2 .getPrivileges (), containsInAnyOrder ("all" ));
1469+ assertThat (index2 .getFieldSecurity (), emptyIterable ());
1470+ assertThat (index2 .getQueries (), emptyIterable ());
1471+
1472+ Set <GetUserPrivilegesResponse .Indices > actualIndexPrivileges = response .getIndexPrivileges ();
1473+ assertThat (actualIndexPrivileges , iterableWithSize (4 ));
1474+ final GetUserPrivilegesResponse .Indices index1And2 = findIndexPrivilege (actualIndexPrivileges , Set .of ("index-1" , "index-2" ), true );
1475+ assertThat (index1And2 .getIndices (), containsInAnyOrder ("index-1" , "index-2" ));
1476+ assertThat (index1And2 .getPrivileges (), containsInAnyOrder ("read" , "write" , "read_failure_store" , "manage_failure_store" , "manage" ));
1477+ assertThat (
1478+ index1And2 .getFieldSecurity (),
1479+ containsInAnyOrder (new FieldPermissionsDefinition .FieldGrantExcludeGroup (new String [] { "public.*" }, new String [0 ]))
1480+ );
1481+ assertThat (index1And2 .getQueries (), containsInAnyOrder (query ));
1482+
1483+ final GetUserPrivilegesResponse .Indices index1And2NotRestricted = findIndexPrivilege (
1484+ actualIndexPrivileges ,
1485+ Set .of ("index-1" , "index-2" ),
1486+ false
1487+ );
1488+ assertThat (index1And2NotRestricted .getIndices (), containsInAnyOrder ("index-1" , "index-2" ));
1489+ assertThat (index1And2NotRestricted .getPrivileges (), containsInAnyOrder ("read_failure_store" ));
1490+ assertThat (index1And2NotRestricted .getFieldSecurity (), emptyIterable ());
1491+ assertThat (index1And2NotRestricted .getQueries (), emptyIterable ());
1492+ }
1493+
14181494 public void testBackingIndicesAreIncludedForAuthorizedDataStreams () {
14191495 final String dataStreamName = "my_data_stream" ;
14201496 User user = new User (randomAlphaOfLengthBetween (4 , 12 ));
@@ -2017,6 +2093,21 @@ private static RequestInfo createRequestInfo(TransportRequest request, String ac
20172093 );
20182094 }
20192095
2096+ private GetUserPrivilegesResponse .Indices findIndexPrivilege (
2097+ Set <GetUserPrivilegesResponse .Indices > indices ,
2098+ Set <String > indexNames ,
2099+ boolean allowRestrictedIndices
2100+ ) {
2101+ return indices .stream ()
2102+ .filter (
2103+ i -> i .allowRestrictedIndices () == allowRestrictedIndices
2104+ && i .getIndices ().containsAll (indexNames )
2105+ && indexNames .containsAll (i .getIndices ())
2106+ )
2107+ .findFirst ()
2108+ .get ();
2109+ }
2110+
20202111 private GetUserPrivilegesResponse .Indices findIndexPrivilege (Set <GetUserPrivilegesResponse .Indices > indices , String name ) {
20212112 return indices .stream ().filter (i -> i .getIndices ().contains (name )).findFirst ().get ();
20222113 }
0 commit comments