# How to Build a Role with Java API for indices privileges

**URL:** <https://discuss.elastic.co/t/how-to-build-a-role-with-java-api-for-indices-privileges/290974>\
**Category:** Elasticsearch\
**Tags:** elastic-stack-security, language-clients\
**Created:** [December 5, 2021, 7:53am UTC](https://discuss.elastic.co/t/how-to-build-a-role-with-java-api-for-indices-privileges/290974 "2021-12-05T07:53:23Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![David\_Sheard](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/david_sheard/32/81142_2.png) [@David\_Sheard](https://discuss.elastic.co/u/David_Sheard)\
**Post date:** [December 5, 2021, 7:53am UTC](https://discuss.elastic.co/t/how-to-build-a-role-with-java-api-for-indices-privileges/290974/1 "2021-12-05T07:53:23Z")

</div>

Hi,

I'm trying tp create an Indices Role using the Java API. Such as below:

```auto
Role role = Role.builder()
			    .name("testPutRole")
			    .indicesPrivileges(???)
			    .build();

```

The example in the doco shows it for a cluster privilege but not for Indices privilege. Is there an example how to create one? I need to add "Granted documents query" as you do in Kibana.  
Appreciated.

---

<div class="post-metadata">

**Author:** ![TimV](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/timv/32/13162_2.png) [@TimV](https://discuss.elastic.co/u/TimV)\
**Post date:** [December 6, 2021, 3:17am UTC](https://discuss.elastic.co/t/how-to-build-a-role-with-java-api-for-indices-privileges/290974/2 "2021-12-06T03:17:04Z")

</div>

There's some code here: [elasticsearch/SecurityDocumentationIT.java at v7.15.1 · elastic/elasticsearch · GitHub](https://github.com/elastic/elasticsearch/blob/v7.15.1/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/SecurityDocumentationIT.java#L2029-L2030)

What specifically are you having an issue with?

---

<div class="post-metadata">

**Author:** ![David\_Sheard](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/david_sheard/32/81142_2.png) [@David\_Sheard](https://discuss.elastic.co/u/David_Sheard)\
**Post date:** [December 6, 2021, 4:21am UTC](https://discuss.elastic.co/t/how-to-build-a-role-with-java-api-for-indices-privileges/290974/3 "2021-12-06T04:21:41Z")

</div>

Champion! Had a quick look and looks good. Really appreciated.

---

<div class="post-metadata">

**Author:** ![David\_Sheard](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/david_sheard/32/81142_2.png) [@David\_Sheard](https://discuss.elastic.co/u/David_Sheard)\
**Post date:** [December 7, 2021, 5:47am UTC](https://discuss.elastic.co/t/how-to-build-a-role-with-java-api-for-indices-privileges/290974/4 "2021-12-07T05:47:40Z")

</div>

Hi,  
Actually it didn't have what I was looking for. I'm looking to create a Role using .indicesPrivileges(), as per my example ".indicesPrivileges(???)". But there is no examples on how to create one. Hence the question marks in the function indicesPrivileges().

---

<div class="post-metadata">

**Author:** ![David\_Sheard](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/david_sheard/32/81142_2.png) [@David\_Sheard](https://discuss.elastic.co/u/David_Sheard)\
**Post date:** [December 7, 2021, 5:53am UTC](https://discuss.elastic.co/t/how-to-build-a-role-with-java-api-for-indices-privileges/290974/5 "2021-12-07T05:53:28Z")

</div>

Hi,  
I can see the constructor for the IndicesPrivileges class. However Some of the Collections are "String" so no idea what they should be including the String variable called "query". An example or two would be great.

```auto
private IndicesPrivileges(Collection<String> indices, Collection<String> privileges, boolean allowRestrictedIndices,
                              @Nullable FieldSecurity fieldSecurity, @Nullable String query) {
        super(indices, privileges, allowRestrictedIndices);
        this.fieldSecurity = fieldSecurity;
        this.query = query;
    }

```

---

<div class="post-metadata">

**Author:** ![TimV](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/timv/32/13162_2.png) [@TimV](https://discuss.elastic.co/u/TimV)\
**Post date:** [December 7, 2021, 9:43am UTC](https://discuss.elastic.co/t/how-to-build-a-role-with-java-api-for-indices-privileges/290974/6 "2021-12-07T09:43:00Z")

</div>

There's an example query on the main docs page for the Put Role API

- [Create or update roles API | Elasticsearch Guide [7.15] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-put-role.html#security-api-put-role-example)

Does that help? The string is literally identical to what you would put in the text box in Kibana.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [January 4, 2022, 9:43am UTC](https://discuss.elastic.co/t/how-to-build-a-role-with-java-api-for-indices-privileges/290974/7 "2022-01-04T09:43:56Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
