|
@@ -47,19 +47,19 @@ public class DeleteAsyncResultsService {
|
|
|
|
|
|
|
|
public void deleteResponse(DeleteAsyncResultRequest request,
|
|
public void deleteResponse(DeleteAsyncResultRequest request,
|
|
|
ActionListener<AcknowledgedResponse> listener) {
|
|
ActionListener<AcknowledgedResponse> listener) {
|
|
|
- hasManagePrivilegeAsync(resp -> deleteResponseAsync(request, resp, listener));
|
|
|
|
|
|
|
+ hasCancelTaskPrivilegeAsync(resp -> deleteResponseAsync(request, resp, listener));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * Checks if the authenticated user has the right privilege (manage) to
|
|
|
|
|
|
|
+ * Checks if the authenticated user has the right privilege (cancel_task) to
|
|
|
* delete async search submitted by another user.
|
|
* delete async search submitted by another user.
|
|
|
*/
|
|
*/
|
|
|
- private void hasManagePrivilegeAsync(Consumer<Boolean> consumer) {
|
|
|
|
|
|
|
+ private void hasCancelTaskPrivilegeAsync(Consumer<Boolean> consumer) {
|
|
|
final Authentication current = store.getAuthentication();
|
|
final Authentication current = store.getAuthentication();
|
|
|
if (current != null) {
|
|
if (current != null) {
|
|
|
HasPrivilegesRequest req = new HasPrivilegesRequest();
|
|
HasPrivilegesRequest req = new HasPrivilegesRequest();
|
|
|
req.username(current.getUser().principal());
|
|
req.username(current.getUser().principal());
|
|
|
- req.clusterPrivileges(ClusterPrivilegeResolver.MANAGE.name());
|
|
|
|
|
|
|
+ req.clusterPrivileges(ClusterPrivilegeResolver.CANCEL_TASK.name());
|
|
|
req.indexPrivileges(new RoleDescriptor.IndicesPrivileges[]{});
|
|
req.indexPrivileges(new RoleDescriptor.IndicesPrivileges[]{});
|
|
|
req.applicationPrivileges(new RoleDescriptor.ApplicationResourcePrivileges[]{});
|
|
req.applicationPrivileges(new RoleDescriptor.ApplicationResourcePrivileges[]{});
|
|
|
try {
|
|
try {
|
|
@@ -75,17 +75,17 @@ public class DeleteAsyncResultsService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void deleteResponseAsync(DeleteAsyncResultRequest request,
|
|
private void deleteResponseAsync(DeleteAsyncResultRequest request,
|
|
|
- boolean hasManagePrivilege,
|
|
|
|
|
|
|
+ boolean hasCancelTaskPrivilege,
|
|
|
ActionListener<AcknowledgedResponse> listener) {
|
|
ActionListener<AcknowledgedResponse> listener) {
|
|
|
try {
|
|
try {
|
|
|
AsyncExecutionId searchId = AsyncExecutionId.decode(request.getId());
|
|
AsyncExecutionId searchId = AsyncExecutionId.decode(request.getId());
|
|
|
- AsyncTask task = hasManagePrivilege ? store.getTask(taskManager, searchId, AsyncTask.class) :
|
|
|
|
|
|
|
+ AsyncTask task = hasCancelTaskPrivilege ? store.getTask(taskManager, searchId, AsyncTask.class) :
|
|
|
store.getTaskAndCheckAuthentication(taskManager, searchId, AsyncTask.class);
|
|
store.getTaskAndCheckAuthentication(taskManager, searchId, AsyncTask.class);
|
|
|
if (task != null) {
|
|
if (task != null) {
|
|
|
//the task was found and gets cancelled. The response may or may not be found, but we will return 200 anyways.
|
|
//the task was found and gets cancelled. The response may or may not be found, but we will return 200 anyways.
|
|
|
task.cancelTask(taskManager, () -> deleteResponseFromIndex(searchId, true, listener), "cancelled by user");
|
|
task.cancelTask(taskManager, () -> deleteResponseFromIndex(searchId, true, listener), "cancelled by user");
|
|
|
} else {
|
|
} else {
|
|
|
- if (hasManagePrivilege) {
|
|
|
|
|
|
|
+ if (hasCancelTaskPrivilege) {
|
|
|
deleteResponseFromIndex(searchId, false, listener);
|
|
deleteResponseFromIndex(searchId, false, listener);
|
|
|
} else {
|
|
} else {
|
|
|
store.ensureAuthenticatedUserCanDeleteFromIndex(searchId,
|
|
store.ensureAuthenticatedUserCanDeleteFromIndex(searchId,
|