Skip to content

Commit 444112b

Browse files
committed
Superuser etc
1 parent 2ccd969 commit 444112b

File tree

4 files changed

+17
-16
lines changed

4 files changed

+17
-16
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/permission/Role.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ static SimpleRole buildFromRoleDescriptor(
428428
);
429429
Set<BytesReference> query = indexPrivilege.getQuery() == null ? null : Collections.singleton(indexPrivilege.getQuery());
430430
boolean allowRestrictedIndices = indexPrivilege.allowRestrictedIndices();
431-
Map<IndexComponentSelectorPrivilege, Set<String>> split = IndexComponentSelectorPrivilege.groupBySelectors(
431+
Map<IndexComponentSelectorPrivilege, Set<String>> split = IndexComponentSelectorPrivilege.groupBySelector(
432432
indexPrivilege.getPrivileges()
433433
);
434434
for (var entry : split.entrySet()) {

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/privilege/IndexComponentSelectorPrivilege.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package org.elasticsearch.xpack.core.security.authz.privilege;
99

1010
import org.elasticsearch.action.support.IndexComponentSelector;
11+
import org.elasticsearch.core.Predicates;
1112

1213
import java.util.HashSet;
1314
import java.util.Map;
@@ -16,7 +17,7 @@
1617
import java.util.stream.Collectors;
1718

1819
public record IndexComponentSelectorPrivilege(String name, Predicate<IndexComponentSelector> predicate) {
19-
public static final IndexComponentSelectorPrivilege ALL = new IndexComponentSelectorPrivilege("all", (selector) -> true);
20+
public static final IndexComponentSelectorPrivilege ALL = new IndexComponentSelectorPrivilege("all", Predicates.always());
2021
public static final IndexComponentSelectorPrivilege DATA = new IndexComponentSelectorPrivilege(
2122
"data",
2223
IndexComponentSelector.DATA::equals
@@ -43,30 +44,29 @@ public static Set<IndexComponentSelectorPrivilege> get(Set<String> indexPrivileg
4344
return indexPrivileges.stream().map(IndexComponentSelectorPrivilege::get).collect(Collectors.toSet());
4445
}
4546

46-
public static Map<IndexComponentSelectorPrivilege, Set<String>> groupBySelectors(String... indexPrivileges) {
47-
return groupBySelectors(Set.of(indexPrivileges));
47+
public static Map<IndexComponentSelectorPrivilege, Set<String>> groupBySelector(String... indexPrivileges) {
48+
return groupBySelector(Set.of(indexPrivileges));
4849
}
4950

50-
public static Map<IndexComponentSelectorPrivilege, Set<String>> groupBySelectors(Set<String> indexPrivileges) {
51+
public static Map<IndexComponentSelectorPrivilege, Set<String>> groupBySelector(Set<String> indexPrivileges) {
5152
final Set<String> dataAccessPrivileges = new HashSet<>();
5253
final Set<String> failuresAccessPrivileges = new HashSet<>();
5354

5455
for (String indexPrivilege : indexPrivileges) {
5556
final IndexComponentSelectorPrivilege selectorPrivilege = get(indexPrivilege);
5657
// If we ever hit `all`, the entire group can be treated as granting "all" access and we can return early
57-
if (selectorPrivilege.equals(ALL)) {
58+
if (selectorPrivilege == ALL) {
5859
return Map.of(ALL, indexPrivileges);
5960
}
6061

61-
if (selectorPrivilege.equals(DATA)) {
62+
if (selectorPrivilege == DATA) {
6263
dataAccessPrivileges.add(indexPrivilege);
63-
} else if (selectorPrivilege.equals(FAILURES)) {
64+
} else if (selectorPrivilege == FAILURES) {
6465
failuresAccessPrivileges.add(indexPrivilege);
6566
} else {
66-
assert false : "index privilege [" + indexPrivilege + "] mapped to an unexpected selector [" + selectorPrivilege + "]";
67-
throw new IllegalStateException(
68-
"index privilege [" + indexPrivilege + "] mapped to an unexpected selector [" + selectorPrivilege + "]"
69-
);
67+
final var message = "index privilege [" + indexPrivilege + "] mapped to an unexpected selector [" + selectorPrivilege + "]";
68+
assert false : message;
69+
throw new IllegalStateException(message);
7070
}
7171
}
7272

@@ -81,6 +81,7 @@ public static Map<IndexComponentSelectorPrivilege, Set<String>> groupBySelectors
8181

8282
private static IndexComponentSelectorPrivilege get(String indexPrivilegeName) {
8383
final IndexPrivilege indexPrivilege = IndexPrivilege.getNamedOrNull(indexPrivilegeName);
84+
// `null` means we got a raw action instead of a named privilege; all raw actions are treated as data access
8485
if (indexPrivilege == null) {
8586
return DATA;
8687
} else if (indexPrivilege == IndexPrivilege.ALL) {

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/store/ReservedRolesStore.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public class ReservedRolesStore implements BiConsumer<Set<String>, ActionListene
7878
RoleDescriptor.IndicesPrivileges.builder().indices("*").privileges("all").allowRestrictedIndices(false).build(),
7979
RoleDescriptor.IndicesPrivileges.builder()
8080
.indices("*")
81-
.privileges("monitor", "read", "view_index_metadata", "read_cross_cluster")
81+
.privileges("monitor", "read", "view_index_metadata", "read_cross_cluster", "read_failure_store")
8282
.allowRestrictedIndices(true)
8383
.build() },
8484
new RoleDescriptor.ApplicationResourcePrivileges[] {
@@ -95,7 +95,7 @@ public class ReservedRolesStore implements BiConsumer<Set<String>, ActionListene
9595
new RoleDescriptor.RemoteIndicesPrivileges(
9696
RoleDescriptor.IndicesPrivileges.builder()
9797
.indices("*")
98-
.privileges("monitor", "read", "view_index_metadata", "read_cross_cluster")
98+
.privileges("monitor", "read", "view_index_metadata", "read_cross_cluster", "read_failure_store")
9999
.allowRestrictedIndices(true)
100100
.build(),
101101
"*"

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/authz/store/CompositeRolesStore.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,7 @@ public static void buildRoleFromDescriptors(
543543

544544
for (Map.Entry<Set<String>, MergeableIndicesPrivilege> entry : indicesPrivilegesMap.entrySet()) {
545545
MergeableIndicesPrivilege indicesPrivilege = entry.getValue();
546-
Map<IndexComponentSelectorPrivilege, Set<String>> split = IndexComponentSelectorPrivilege.groupBySelectors(
546+
Map<IndexComponentSelectorPrivilege, Set<String>> split = IndexComponentSelectorPrivilege.groupBySelector(
547547
indicesPrivilege.privileges
548548
);
549549
FieldPermissions fieldPermissions = fieldPermissionsCache.getFieldPermissions(indicesPrivilege.fieldPermissionsDefinition);
@@ -561,7 +561,7 @@ public static void buildRoleFromDescriptors(
561561
}
562562
for (Map.Entry<Set<String>, MergeableIndicesPrivilege> entry : restrictedIndicesPrivilegesMap.entrySet()) {
563563
MergeableIndicesPrivilege indicesPrivilege = entry.getValue();
564-
Map<IndexComponentSelectorPrivilege, Set<String>> split = IndexComponentSelectorPrivilege.groupBySelectors(
564+
Map<IndexComponentSelectorPrivilege, Set<String>> split = IndexComponentSelectorPrivilege.groupBySelector(
565565
indicesPrivilege.privileges
566566
);
567567
FieldPermissions fieldPermissions = fieldPermissionsCache.getFieldPermissions(indicesPrivilege.fieldPermissionsDefinition);

0 commit comments

Comments
 (0)