Skip to content

Commit e196254

Browse files
committed
part
1 parent acc5210 commit e196254

File tree

1 file changed

+63
-57
lines changed

1 file changed

+63
-57
lines changed

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java

Lines changed: 63 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@
139139
import java.nio.ByteBuffer;
140140
import java.nio.file.Paths;
141141
import java.util.ArrayList;
142+
import java.util.Arrays;
142143
import java.util.Collections;
143144
import java.util.List;
144145
import 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

Comments
 (0)