8585import org .apache .iotdb .confignode .consensus .request .write .template .CreateSchemaTemplatePlan ;
8686import org .apache .iotdb .confignode .consensus .request .write .template .ExtendSchemaTemplatePlan ;
8787import org .apache .iotdb .confignode .consensus .request .write .trigger .DeleteTriggerInTablePlan ;
88+ import org .apache .iotdb .confignode .consensus .request .write .trigger .UpdateTriggerStateInTablePlan ;
8889import org .apache .iotdb .confignode .manager .ConfigManager ;
8990import org .apache .iotdb .confignode .manager .pipe .event .PipeConfigRegionSnapshotEvent ;
9091import org .apache .iotdb .confignode .manager .pipe .metric .receiver .PipeConfigNodeReceiverMetrics ;
@@ -297,8 +298,9 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti
297298 return status ;
298299 }
299300
300- String database ;
301- String templateName ;
301+ final String database ;
302+ final String templateName ;
303+ final String triggerName ;
302304 switch (plan .getType ()) {
303305 case CreateDatabase :
304306 database = ((DatabaseSchemaPlan ) plan ).getSchema ().getName ();
@@ -351,7 +353,7 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti
351353 .getAllPathPatterns ()),
352354 true );
353355 case PipeAlterEncodingCompressor :
354- // Judge here in the future
356+ // The audit check does not need any
355357 if (configManager
356358 .checkUserPrivileges (username , new PrivilegeUnion (PrivilegeType .AUDIT ))
357359 .getStatus ()
@@ -424,10 +426,11 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti
424426 PrivilegeType .WRITE_SCHEMA ))
425427 .getStatus ();
426428 case UpdateTriggerStateInTable :
429+ triggerName = ((UpdateTriggerStateInTablePlan ) plan ).getTriggerName ();
430+ return checkGlobalStatus (userEntity , PrivilegeType .USE_TRIGGER , triggerName , true );
427431 case DeleteTriggerInTable :
428- return configManager
429- .checkUserPrivileges (username , new PrivilegeUnion (PrivilegeType .USE_TRIGGER ))
430- .getStatus ();
432+ triggerName = ((DeleteTriggerInTablePlan ) plan ).getTriggerName ();
433+ return checkGlobalStatus (userEntity , PrivilegeType .USE_TRIGGER , triggerName , true );
431434 case PipeCreateTableOrView :
432435 return configManager
433436 .checkUserPrivileges (
@@ -597,9 +600,8 @@ username, new PrivilegeUnion(PrivilegeType.values()[permission], true))
597600 case DropUserV2 :
598601 case RDropUser :
599602 case RDropUserV2 :
600- return configManager
601- .checkUserPrivileges (username , new PrivilegeUnion (PrivilegeType .MANAGE_USER ))
602- .getStatus ();
603+ return checkGlobalStatus (
604+ userEntity , PrivilegeType .MANAGE_USER , ((AuthorPlan ) plan ).getUserName (), true );
603605 case CreateRole :
604606 case RCreateRole :
605607 case DropRole :
@@ -608,9 +610,8 @@ username, new PrivilegeUnion(PrivilegeType.values()[permission], true))
608610 case RGrantUserRole :
609611 case RevokeRoleFromUser :
610612 case RRevokeUserRole :
611- return configManager
612- .checkUserPrivileges (username , new PrivilegeUnion (PrivilegeType .MANAGE_ROLE ))
613- .getStatus ();
613+ return checkGlobalStatus (
614+ userEntity , PrivilegeType .MANAGE_ROLE , ((AuthorPlan ) plan ).getRoleName (), true );
614615 default :
615616 return StatusUtils .OK ;
616617 }
@@ -639,6 +640,30 @@ public static TSStatus checkDatabaseStatus(
639640 return result ;
640641 }
641642
643+ public static TSStatus checkTableStatus (
644+ final IAuditEntity userEntity ,
645+ final PrivilegeType privilegeType ,
646+ final String database ,
647+ final String tableName ,
648+ final boolean isLastCheck ) {
649+ final ConfigManager configManager = ConfigNode .getInstance ().getConfigManager ();
650+ final CNAuditLogger logger = configManager .getAuditLogger ();
651+ final TSStatus result =
652+ configManager
653+ .getPermissionManager ()
654+ .checkUserPrivileges (
655+ userEntity .getUsername (), new PrivilegeUnion (database , tableName , privilegeType ))
656+ .getStatus ();
657+ if (result .getCode () == TSStatusCode .SUCCESS_STATUS .getStatusCode () || isLastCheck ) {
658+ logger .recordAuditLog (
659+ userEntity
660+ .setPrivilegeType (privilegeType )
661+ .setResult (result .getCode () == TSStatusCode .SUCCESS_STATUS .getStatusCode ()),
662+ () -> tableName );
663+ }
664+ return result ;
665+ }
666+
642667 private TSStatus executePlan (final ConfigPhysicalPlan plan ) throws ConsensusException {
643668 final String queryId = generatePseudoQueryId ();
644669 switch (plan .getType ()) {
0 commit comments