### Elasticsearch Version

latest

### Installed Plugins

_No response_

### Java Version

18.0.1.1

### OS Version

Linux 5.17.6-1-MANJARO

### Problem Description

We created a `hasData` service which utilizes the `resolve_index` api to check whether ES data exists. When making a call to `internal/index-pattern-management/resolve_index` to query whether data exists or not, in certain scenarios it fails with a 500 Internal Server Error.

The ES error being - 

> security_exception: [security_exception] Reason: action [indices:admin/resolve/index] is unauthorized for user [test_user] with roles [test_dashboard_user,reporting_user], this
action is granted by the index privileges [view_index_metadata,manage,all]

The scenarios being:
Scenario one:
1. There are 3 indices
2. User has `read` access to 1 of the indices, but not to the other two
3. The call fails with a 500 Internal Server Error. The user should be able to see the index they have access to.

Scenario two:
1. This refers to a scenario where the user has `read` access to the index, but `no view_index_metadata` privileges.

Original issue ticket in Kibana for reference - [#132478](https://github.com/elastic/kibana/issues/132478)

### Steps to Reproduce

The user has `read` access to the index, but `no view_index_metadata` privileges.
The api fails with a 500 due to the missing permissions.

### Logs (if relevant)

security_exception: [security_exception] Reason: action [indices:admin/resolve/index] is unauthorized for user [test_user] with roles [test_dashboard_user,reporting_user], this
action is granted by the index privileges [view_index_metadata,manage,all]
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/privilege/IndexPrivilege.java
+ Strings.collectionToCommaDelimitedString(VALUES.entrySet())
                        + "] or a pattern over one of the available index"
                        + " actions";
                    logger.debug(errorMessage);
                    throw new IllegalArgumentException(errorMessage);
                }
            }
        }
        if (actions.isEmpty() == false) {
            automata.add(patterns(actions));
        }
        return new IndexPrivilege(name, unionAndMinimize(automata));
    }
    static Map<String, IndexPrivilege> values() {
        return VALUES;
    }
    public static Set<String> names() {
        return Collections.unmodifiableSet(VALUES.keySet());
    }
    /**
     * Returns the names of privileges that grant the specified action.
     * @return A collection of names, ordered (to the extent possible) from least privileged (e.g. {@link #CREATE_DOC})
     * to most privileged (e.g. {@link #ALL})
     * @see Privilege#sortByAccessLevel
     */
    public static Collection<String> findPrivilegesThatGrant(String action) {
        return VALUES.entrySet().stream().filter(e -> e.getValue().predicate.test(action)).map(e -> e.getKey()).toList();
    }
}