@@ -40,6 +40,7 @@ import PageLayout from "../../../Common/Layout/PageLayout";
40
40
import InputUnitMenu from "../../../Common/FormComponents/InputUnitMenu/InputUnitMenu" ;
41
41
import FormLayout from "../../../Common/FormLayout" ;
42
42
import HelpBox from "../../../../../common/HelpBox" ;
43
+ import TooltipWrapper from "../../../Common/TooltipWrapper/TooltipWrapper" ;
43
44
import SectionTitle from "../../../Common/SectionTitle" ;
44
45
import { selDistSet , selSiteRep } from "../../../../../systemSlice" ;
45
46
import {
@@ -162,9 +163,17 @@ const AddBucket = ({ classes }: IsetProps) => {
162
163
( state : AppState ) => state . addBucket . navigateTo
163
164
) ;
164
165
165
- const lockingAllowed = hasPermission ( "*" , [
166
+ const lockingAllowed = hasPermission (
167
+ "*" ,
168
+ [
169
+ IAM_SCOPES . S3_PUT_BUCKET_VERSIONING ,
170
+ IAM_SCOPES . S3_PUT_BUCKET_OBJECT_LOCK_CONFIGURATION ,
171
+ ] ,
172
+ true
173
+ ) ;
174
+
175
+ const versioningAllowed = hasPermission ( "*" , [
166
176
IAM_SCOPES . S3_PUT_BUCKET_VERSIONING ,
167
- IAM_SCOPES . S3_PUT_BUCKET_OBJECT_LOCK_CONFIGURATION ,
168
177
] ) ;
169
178
170
179
useEffect ( ( ) => {
@@ -243,19 +252,7 @@ const AddBucket = ({ classes }: IsetProps) => {
243
252
< br />
244
253
< b > Object Locking</ b > prevents objects from being deleted.
245
254
Required to support retention and legal hold. Can only be
246
- enabled at bucket creation.{ " " }
247
- { ! lockingAllowed ? (
248
- < Fragment >
249
- < br />
250
- < span >
251
- To enable this option{ " " }
252
- < i > s3:PutBucketObjectLockConfiguration</ i > and{ " " }
253
- < i > s3:PutBucketVersioning</ i > permissions must be set.
254
- </ span >
255
- </ Fragment >
256
- ) : (
257
- ""
258
- ) }
255
+ enabled at bucket creation.
259
256
< br />
260
257
< br />
261
258
< b > Quota</ b > limits the amount of data in the bucket.
@@ -323,39 +320,68 @@ const AddBucket = ({ classes }: IsetProps) => {
323
320
< br />
324
321
</ Fragment >
325
322
) }
326
- < FormSwitchWrapper
327
- value = "versioned"
328
- id = "versioned"
329
- name = "versioned"
330
- checked = { versioningEnabled }
331
- onChange = { ( event : React . ChangeEvent < HTMLInputElement > ) => {
332
- dispatch ( setVersioning ( event . target . checked ) ) ;
333
- } }
334
- label = { "Versioning" }
335
- disabled = {
336
- ! distributedSetup ||
337
- lockingEnabled ||
338
- siteReplicationInfo . enabled
323
+ < TooltipWrapper
324
+ tooltip = {
325
+ versioningAllowed
326
+ ? ""
327
+ : "You require additional permissions in order to enable Versioning. Please ask your MinIO administrator to grant you " +
328
+ IAM_SCOPES . S3_PUT_BUCKET_VERSIONING +
329
+ " permission in order to enable Versioning."
339
330
}
340
- />
331
+ >
332
+ < FormSwitchWrapper
333
+ value = "versioned"
334
+ id = "versioned"
335
+ name = "versioned"
336
+ checked = { versioningEnabled }
337
+ onChange = { ( event : React . ChangeEvent < HTMLInputElement > ) => {
338
+ dispatch ( setVersioning ( event . target . checked ) ) ;
339
+ } }
340
+ label = { "Versioning" }
341
+ disabled = {
342
+ ! distributedSetup ||
343
+ lockingEnabled ||
344
+ siteReplicationInfo . enabled ||
345
+ ! versioningAllowed
346
+ }
347
+ />
348
+ </ TooltipWrapper >
341
349
</ Grid >
342
350
< Grid item xs = { 12 } >
343
- < FormSwitchWrapper
344
- value = "locking"
345
- id = "locking"
346
- name = "locking"
347
- disabled = {
348
- lockingFieldDisabled || ! distributedSetup || ! lockingAllowed
351
+ < TooltipWrapper
352
+ tooltip = {
353
+ lockingAllowed
354
+ ? ""
355
+ : "You require additional permissions in order to enable Locking. Please ask your MinIO administrator to grant you " +
356
+ ( versioningAllowed
357
+ ? ""
358
+ : IAM_SCOPES . S3_PUT_BUCKET_VERSIONING + " and " ) +
359
+ IAM_SCOPES . S3_PUT_BUCKET_OBJECT_LOCK_CONFIGURATION +
360
+ " permissions in order to enable Locking."
349
361
}
350
- checked = { lockingEnabled }
351
- onChange = { ( event : React . ChangeEvent < HTMLInputElement > ) => {
352
- dispatch ( setEnableObjectLocking ( event . target . checked ) ) ;
353
- if ( event . target . checked && ! siteReplicationInfo . enabled ) {
354
- dispatch ( setVersioning ( true ) ) ;
362
+ >
363
+ < FormSwitchWrapper
364
+ value = "locking"
365
+ id = "locking"
366
+ name = "locking"
367
+ disabled = {
368
+ lockingFieldDisabled ||
369
+ ! distributedSetup ||
370
+ ! lockingAllowed
355
371
}
356
- } }
357
- label = { "Object Locking" }
358
- />
372
+ checked = { lockingEnabled }
373
+ onChange = { ( event : React . ChangeEvent < HTMLInputElement > ) => {
374
+ dispatch ( setEnableObjectLocking ( event . target . checked ) ) ;
375
+ if (
376
+ event . target . checked &&
377
+ ! siteReplicationInfo . enabled
378
+ ) {
379
+ dispatch ( setVersioning ( true ) ) ;
380
+ }
381
+ } }
382
+ label = { "Object Locking" }
383
+ />
384
+ </ TooltipWrapper >
359
385
</ Grid >
360
386
361
387
< Grid item xs = { 12 } >
0 commit comments