123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- [role="xpack"]
- [[security-api-has-privileges-user-profile]]
- === Has privileges user profile API
- ++++
- <titleabbrev>Has privileges user profile</titleabbrev>
- ++++
- .New API reference
- [sidebar]
- --
- For the most up-to-date API details, refer to {api-es}/group/endpoint-security[Security APIs].
- --
- NOTE: The user profile feature is designed only for use by {kib} and
- Elastic’s {observability}, {ents}, and {elastic-sec} solutions. Individual
- users and external applications should not call this API directly. Elastic reserves
- the right to change or remove this feature in future releases without prior notice.
- Determines whether the users associated with the specified <<user-profile, user profile>> IDs
- have all the requested privileges.
- [[security-api-has-privileges-user-profile-request]]
- ==== {api-request-title}
- `GET /_security/profile/_has_privileges`
- `POST /_security/profile/_has_privileges`
- [[security-api-has-privileges-user-profile-prereqs]]
- ==== {api-prereq-title}
- To use this API, you must have _at least_ the `read_security`
- <<privileges-list-cluster,cluster privilege>> (or a greater privilege
- such as `manage_user_profile` or `manage_security`).
- [[security-api-has-privileges-user-profile-desc]]
- ==== {api-description-title}
- This API uses the profile IDs, as returned by <<security-api-activate-user-profile>>,
- to identify the users for which to check the privileges of.
- It is similar to the <<security-api-has-privileges>> API, but unlike it, this API
- checks the privileges of other users, not of the user that's calling it.
- See <<security-privileges>> for the list of privileges that can be specified in this API.
- A successful call returns the subset list of profile IDs that have **all** the requested privileges.
- [[security-api-has-privileges-user-profile-request-body]]
- ==== {api-request-body-title}
- `uids`:: (list) A list of <<security-api-activate-user-profile-response-body, profile IDs>>. The privileges are checked for associated users of the profiles.
- `privileges`:: The object containing all the privileges to be checked.
- `cluster`::: (list) A list of the cluster privileges that you want to check.
- `index`:::
- `names`:::: (list) A list of indices.
- `allow_restricted_indices`:::: (Boolean) This needs to be set to `true` (default
- is `false`) if using wildcards or regexps for patterns that cover restricted
- indices. Implicitly, restricted indices do not match index patterns because
- restricted indices usually have limited privileges and including them in
- pattern tests would render most such tests `false`. If restricted indices are
- explicitly included in the `names` list, privileges will be checked against
- them regardless of the value of `allow_restricted_indices`.
- `privileges`:::: (list) A list of the privileges that you want to check for the
- specified indices.
- `application`:::
- `application`:::: (string) The name of the application.
- `privileges`:::: (list) A list of the privileges that you want to check for the
- specified resources. May be either application privilege names, or the names of
- actions that are granted by those privileges.
- `resources`:::: (list) A list of resource names against which the privileges
- should be checked.
- Note that the `privileges` section above is identical to the
- <<security-api-has-privileges-request-body, request body of the other Has Privileges API>>.
- [[security-api-has-privileges-user-profile-response-body]]
- ==== {api-response-body-title}
- A successful has privileges user profile API call returns a JSON structure that contains
- two fields:
- `has_privilege_uids`:: (list) The subset of the requested profile IDs of the users that have
- **all** the requested privileges.
- `errors`:: (object) Errors encountered while fulfilling the request. This field is absent if there is no error.
- It does **not** include the profile IDs of the users that do not have all the requested privileges.
- +
- .Properties of objects in `errors`
- [%collapsible%open]
- ====
- `count`:: (number) Total number of errors
- `details`:: (object) The detailed error report with keys being profile IDs and values being the exact errors.
- ====
- [[security-api-has-privileges-user-profile-example]]
- ==== {api-examples-title}
- The following example checks whether the two users associated with the specified profiles have all the
- requested set of cluster, index, and application privileges:
- [source,console]
- --------------------------------------------------
- POST /_security/profile/_has_privileges
- {
- "uids": [
- "u_LQPnxDxEjIH0GOUoFkZr5Y57YUwSkL9Joiq-g4OCbPc_0",
- "u_rzRnxDgEHIH0GOUoFkZr5Y27YUwSk19Joiq=g4OCxxB_1",
- "u_does-not-exist_0"
- ],
- "privileges": {
- "cluster": [ "monitor", "create_snapshot", "manage_ml" ],
- "index" : [
- {
- "names": [ "suppliers", "products" ],
- "privileges": [ "create_doc"]
- },
- {
- "names": [ "inventory" ],
- "privileges" : [ "read", "write" ]
- }
- ],
- "application": [
- {
- "application": "inventory_manager",
- "privileges" : [ "read", "data:write/inventory" ],
- "resources" : [ "product/1852563" ]
- }
- ]
- }
- }
- --------------------------------------------------
- // TEST[skip:TODO setup and tests will be possible once the profile uid is predictable]
- The following example output indicates that only one of the three users has all the privileges
- and one of them is not found:
- [source,js]
- --------------------------------------------------
- {
- "has_privilege_uids": ["u_rzRnxDgEHIH0GOUoFkZr5Y27YUwSk19Joiq=g4OCxxB_1"],
- "errors": {
- "count": 1,
- "details": {
- "u_does-not-exist_0": {
- "type": "resource_not_found_exception",
- "reason": "profile document not found"
- }
- }
- }
- }
- --------------------------------------------------
- // NOTCONSOLE
|