27
27
import org .opensearch .action .support .ActionFilters ;
28
28
import org .opensearch .action .support .HandledTransportAction ;
29
29
import org .opensearch .action .support .WriteRequest ;
30
+ import org .opensearch .ad .constant .ConfigConstants ;
30
31
import org .opensearch .ad .indices .ADIndexManagement ;
31
32
import org .opensearch .ad .model .AnomalyDetector ;
32
33
import org .opensearch .ad .rest .handler .IndexAnomalyDetectorActionHandler ;
@@ -64,6 +65,7 @@ public class IndexAnomalyDetectorTransportAction extends HandledTransportAction<
64
65
private volatile Boolean filterByEnabled ;
65
66
private final SearchFeatureDao searchFeatureDao ;
66
67
private final Settings settings ;
68
+ private final boolean resourceSharingEnabled ;
67
69
68
70
@ Inject
69
71
public IndexAnomalyDetectorTransportAction (
@@ -90,6 +92,8 @@ public IndexAnomalyDetectorTransportAction(
90
92
filterByEnabled = AnomalyDetectorSettings .AD_FILTER_BY_BACKEND_ROLES .get (settings );
91
93
clusterService .getClusterSettings ().addSettingsUpdateConsumer (AD_FILTER_BY_BACKEND_ROLES , it -> filterByEnabled = it );
92
94
this .settings = settings ;
95
+ this .resourceSharingEnabled = settings
96
+ .getAsBoolean (ConfigConstants .OPENSEARCH_RESOURCE_SHARING_ENABLED , ConfigConstants .OPENSEARCH_RESOURCE_SHARING_ENABLED_DEFAULT );
93
97
}
94
98
95
99
@ Override
@@ -115,9 +119,10 @@ private void resolveUserAndExecute(
115
119
Consumer <AnomalyDetector > function
116
120
) {
117
121
try {
118
- // Check if user has backend roles
119
- // When filter by is enabled, block users creating/updating detectors who do not have backend roles.
120
- if (filterByEnabled ) {
122
+ // If resource sharing flag is enabled then access evaluation will be performed at DLS level
123
+ if (!resourceSharingEnabled && filterByEnabled ) {
124
+ // Check if user has backend roles
125
+ // When filter by is enabled, block users creating/updating detectors who do not have backend roles.
121
126
String error = checkFilterByBackendRoles (requestedUser );
122
127
if (error != null ) {
123
128
listener .onFailure (new TimeSeriesException (error ));
@@ -140,7 +145,8 @@ private void resolveUserAndExecute(
140
145
clusterService ,
141
146
xContentRegistry ,
142
147
filterByBackendRole ,
143
- AnomalyDetector .class
148
+ AnomalyDetector .class ,
149
+ resourceSharingEnabled
144
150
);
145
151
} else {
146
152
// Create Detector. No need to get current detector.
@@ -175,6 +181,8 @@ protected void adExecute(
175
181
checkIndicesAndExecute (detector .getIndices (), () -> {
176
182
// Don't replace detector's user when update detector
177
183
// Github issue: https://github.com/opensearch-project/anomaly-detection/issues/124
184
+ // TODO this and similar code should be updated to remove reference to a user
185
+
178
186
User detectorUser = currentDetector == null ? user : currentDetector .getUser ();
179
187
IndexAnomalyDetectorActionHandler indexAnomalyDetectorActionHandler = new IndexAnomalyDetectorActionHandler (
180
188
clusterService ,
0 commit comments