139139import java .nio .ByteBuffer ;
140140import java .nio .file .Paths ;
141141import java .util .ArrayList ;
142+ import java .util .Arrays ;
142143import java .util .Collections ;
143144import java .util .List ;
144145import java .util .Map ;
@@ -353,7 +354,8 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti
353354 .getAllPathPatterns ()),
354355 true );
355356 case PipeAlterEncodingCompressor :
356- // The audit check does not need any
357+ // The audit check will only filter but not block the plan
358+ // Hence we do not write any audit log here
357359 if (configManager
358360 .checkUserPrivileges (username , new PrivilegeUnion (PrivilegeType .AUDIT ))
359361 .getStatus ()
@@ -371,13 +373,20 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti
371373 if (((PipeAlterEncodingCompressorPlan ) plan ).isMayAlterAudit ()) {
372374 pathPatternTree .appendPathPattern (Audit .TREE_MODEL_AUDIT_DATABASE_PATH_PATTERN , true );
373375 }
374- ((PipeAlterEncodingCompressorPlan ) plan )
375- .setPatternTreeBytes (
376- PathPatternTreeUtils .intersectWithFullPathPrefixTree (
377- PathPatternTree .deserialize (
378- ((PipeAlterEncodingCompressorPlan ) plan ).getPatternTreeBytes ()),
379- pathPatternTree )
380- .serialize ());
376+ final String auditObject = pathPatternTree .getAllPathPatterns ().toString ();
377+ final PathPatternTree tree =
378+ PathPatternTreeUtils .intersectWithFullPathPrefixTree (
379+ PathPatternTree .deserialize (
380+ ((PipeAlterEncodingCompressorPlan ) plan ).getPatternTreeBytes ()),
381+ pathPatternTree );
382+ ((PipeAlterEncodingCompressorPlan ) plan ).setPatternTreeBytes (tree .serialize ());
383+ configManager
384+ .getAuditLogger ()
385+ .recordAuditLog (
386+ userEntity
387+ .setPrivilegeType (PrivilegeType .WRITE_SCHEMA )
388+ .setResult (!tree .isEmpty ()),
389+ () -> auditObject );
381390 return StatusUtils .OK ;
382391 } else {
383392 return checkPathsStatus (
@@ -405,41 +414,39 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti
405414 new ArrayList <>(((PipeDeactivateTemplatePlan ) plan ).getTemplateSetInfo ().keySet ()),
406415 true );
407416 case SetTTL :
408- return Objects .equals (
409- configManager
410- .getTTLManager ()
411- .getAllTTL ()
412- .get (
413- String .join (
414- String .valueOf (IoTDBConstant .PATH_SEPARATOR ),
415- ((SetTTLPlan ) plan ).getPathPattern ())),
416- ((SetTTLPlan ) plan ).getTTL ())
417- ? StatusUtils .OK
418- : configManager
419- . checkUserPrivileges (
420- username ,
421- (( SetTTLPlan ) plan ). isDataBase ()
422- ? new PrivilegeUnion ( PrivilegeType .MANAGE_DATABASE )
423- : new PrivilegeUnion (
424- Collections . singletonList (
425- new PartialPath ((( SetTTLPlan ) plan ). getPathPattern ())) ,
426- PrivilegeType . WRITE_SCHEMA ))
427- . getStatus ( );
417+ if ( Objects .equals (
418+ configManager
419+ .getTTLManager ()
420+ .getAllTTL ()
421+ .get (
422+ String .join (
423+ String .valueOf (IoTDBConstant .PATH_SEPARATOR ),
424+ ((SetTTLPlan ) plan ).getPathPattern ())),
425+ ((SetTTLPlan ) plan ).getTTL ())) {
426+ return StatusUtils .OK ;
427+ }
428+ final String [] paths = (( SetTTLPlan ) plan ). getPathPattern ();
429+ return (( SetTTLPlan ) plan ). isDataBase ()
430+ ? checkGlobalStatus (
431+ userEntity , PrivilegeType .MANAGE_DATABASE , Arrays . toString ( paths ), true )
432+ : checkPathsStatus (
433+ userEntity ,
434+ PrivilegeType . WRITE_SCHEMA ,
435+ Collections . singletonList ( new PartialPath ( paths )),
436+ true );
428437 case UpdateTriggerStateInTable :
429438 triggerName = ((UpdateTriggerStateInTablePlan ) plan ).getTriggerName ();
430439 return checkGlobalStatus (userEntity , PrivilegeType .USE_TRIGGER , triggerName , true );
431440 case DeleteTriggerInTable :
432441 triggerName = ((DeleteTriggerInTablePlan ) plan ).getTriggerName ();
433442 return checkGlobalStatus (userEntity , PrivilegeType .USE_TRIGGER , triggerName , true );
434443 case PipeCreateTableOrView :
435- return configManager
436- .checkUserPrivileges (
437- username ,
438- new PrivilegeUnion (
439- ((PipeCreateTableOrViewPlan ) plan ).getDatabase (),
440- ((PipeCreateTableOrViewPlan ) plan ).getTable ().getTableName (),
441- PrivilegeType .CREATE ))
442- .getStatus ();
444+ return checkTableStatus (
445+ userEntity ,
446+ PrivilegeType .CREATE ,
447+ ((PipeCreateTableOrViewPlan ) plan ).getDatabase (),
448+ ((PipeCreateTableOrViewPlan ) plan ).getTable ().getTableName (),
449+ true );
443450 case AddTableColumn :
444451 case AddViewColumn :
445452 case SetTableProperties :
@@ -453,24 +460,20 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti
453460 case RenameViewColumn :
454461 case RenameTable :
455462 case RenameView :
456- return configManager
457- .checkUserPrivileges (
458- username ,
459- new PrivilegeUnion (
460- ((AbstractTablePlan ) plan ).getDatabase (),
461- ((AbstractTablePlan ) plan ).getTableName (),
462- PrivilegeType .ALTER ))
463- .getStatus ();
463+ return checkTableStatus (
464+ userEntity ,
465+ PrivilegeType .ALTER ,
466+ ((AbstractTablePlan ) plan ).getDatabase (),
467+ ((AbstractTablePlan ) plan ).getTableName (),
468+ true );
464469 case CommitDeleteTable :
465470 case CommitDeleteView :
466- return configManager
467- .checkUserPrivileges (
468- username ,
469- new PrivilegeUnion (
470- ((CommitDeleteTablePlan ) plan ).getDatabase (),
471- ((CommitDeleteTablePlan ) plan ).getTableName (),
472- PrivilegeType .DROP ))
473- .getStatus ();
471+ return checkTableStatus (
472+ userEntity ,
473+ PrivilegeType .DELETE ,
474+ ((CommitDeleteTablePlan ) plan ).getDatabase (),
475+ ((CommitDeleteTablePlan ) plan ).getTableName (),
476+ true );
474477 case GrantRole :
475478 case GrantUser :
476479 case RevokeUser :
@@ -588,11 +591,14 @@ username, new PrivilegeUnion(PrivilegeType.values()[permission], true))
588591 case UpdateUserV2 :
589592 case RUpdateUser :
590593 case RUpdateUserV2 :
591- return ((AuthorPlan ) plan ).getUserName ().equals (username )
592- ? StatusUtils .OK
593- : configManager
594- .checkUserPrivileges (username , new PrivilegeUnion (PrivilegeType .MANAGE_USER ))
595- .getStatus ();
594+ if (((AuthorPlan ) plan ).getUserName ().equals (username )) {
595+ configManager
596+ .getAuditLogger ()
597+ .recordAuditLog (userEntity .setPrivilegeType (null ).setResult (true ), () -> username );
598+ return StatusUtils .OK ;
599+ }
600+ return checkGlobalStatus (
601+ userEntity , PrivilegeType .MANAGE_USER , ((AuthorPlan ) plan ).getUserName (), true );
596602 case CreateUser :
597603 case RCreateUser :
598604 case CreateUserWithRawPassword :
0 commit comments