Skip to content

Commit 0ec2832

Browse files
committed
fix
1 parent b8423cc commit 0ec2832

File tree

3 files changed

+84
-3
lines changed

3 files changed

+84
-3
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tablet/PipeInsertNodeTabletInsertionEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public PipeInsertNodeTabletInsertionEvent(
123123
Long.MAX_VALUE);
124124
}
125125

126-
private PipeInsertNodeTabletInsertionEvent(
126+
public PipeInsertNodeTabletInsertionEvent(
127127
final Boolean isTableModelEvent,
128128
final String databaseNameFromDataRegion,
129129
final InsertNode insertNode,

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/event/PipeTabletInsertionEventTest.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,21 @@
2020
package org.apache.iotdb.db.pipe.event;
2121

2222
import org.apache.iotdb.commons.exception.IllegalPathException;
23+
import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
2324
import org.apache.iotdb.commons.path.PartialPath;
25+
import org.apache.iotdb.commons.pipe.datastructure.pattern.IoTDBTreePattern;
2426
import org.apache.iotdb.commons.pipe.datastructure.pattern.PrefixTreePattern;
27+
import org.apache.iotdb.commons.pipe.datastructure.pattern.TablePattern;
28+
import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
29+
import org.apache.iotdb.db.auth.AuthorityChecker;
30+
import org.apache.iotdb.db.pipe.event.common.tablet.PipeInsertNodeTabletInsertionEvent;
2531
import org.apache.iotdb.db.pipe.event.common.tablet.PipeRawTabletInsertionEvent;
2632
import org.apache.iotdb.db.pipe.event.common.tablet.parser.TabletInsertionEventTreePatternParser;
2733
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
2834
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowNode;
2935
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertTabletNode;
36+
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.RelationalInsertRowNode;
37+
import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
3038

3139
import org.apache.tsfile.enums.TSDataType;
3240
import org.apache.tsfile.utils.Binary;
@@ -40,6 +48,9 @@
4048

4149
import java.time.LocalDate;
4250
import java.util.Arrays;
51+
import java.util.Collections;
52+
53+
import static org.apache.iotdb.commons.pipe.datastructure.pattern.TreePattern.buildUnionPattern;
4354

4455
public class PipeTabletInsertionEventTest {
4556

@@ -398,4 +409,66 @@ public void isEventTimeOverlappedWithTimeRangeTest() {
398409
event = new PipeRawTabletInsertionEvent(tabletForInsertTabletNode, 115L, Long.MAX_VALUE);
399410
Assert.assertFalse(event.mayEventTimeOverlappedWithTimeRange());
400411
}
412+
413+
@Test
414+
public void testAuthCheck() {
415+
PipeInsertNodeTabletInsertionEvent event;
416+
417+
event =
418+
new PipeInsertNodeTabletInsertionEvent(
419+
false,
420+
"root.db",
421+
insertRowNode,
422+
null,
423+
0,
424+
null,
425+
buildUnionPattern(false, Collections.singletonList(new IoTDBTreePattern(false, null))),
426+
new TablePattern(true, null, null),
427+
"0",
428+
"user",
429+
"localhost",
430+
false,
431+
Long.MIN_VALUE,
432+
Long.MAX_VALUE);
433+
final AccessControl oldControl = AuthorityChecker.getAccessControl();
434+
try {
435+
AuthorityChecker.setAccessControl(new PipeTsFileInsertionEventTest.TestAccessControl());
436+
Assert.assertThrows(AccessDeniedException.class, event::throwIfNoPrivilege);
437+
438+
event =
439+
new PipeInsertNodeTabletInsertionEvent(
440+
true,
441+
"db",
442+
new RelationalInsertRowNode(
443+
new PlanNodeId("plan node 1"),
444+
new PartialPath("tb", false),
445+
false,
446+
new String[] {"s1", "s4"},
447+
new TSDataType[] {TSDataType.DOUBLE, TSDataType.BOOLEAN},
448+
2000L,
449+
new Object[] {2.0, false},
450+
false,
451+
new TsTableColumnCategory[] {
452+
TsTableColumnCategory.TAG,
453+
TsTableColumnCategory.ATTRIBUTE,
454+
TsTableColumnCategory.FIELD
455+
}),
456+
null,
457+
0,
458+
null,
459+
buildUnionPattern(
460+
false, Collections.singletonList(new IoTDBTreePattern(false, null))),
461+
new TablePattern(true, null, null),
462+
"0",
463+
"user",
464+
"localhost",
465+
false,
466+
Long.MIN_VALUE,
467+
Long.MAX_VALUE);
468+
Assert.assertThrows(AccessDeniedException.class, event::throwIfNoPrivilege);
469+
} finally {
470+
AuthorityChecker.setAccessControl(oldControl);
471+
event.close();
472+
}
473+
}
401474
}

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/event/PipeTsFileInsertionEventTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public void testAuthCheck() throws Exception {
152152
}
153153
}
154154

155-
private static class TestAccessControl implements AccessControl {
155+
static class TestAccessControl implements AccessControl {
156156

157157
@Override
158158
public void checkCanCreateDatabase(
@@ -188,7 +188,15 @@ public void checkCanInsertIntoTable(
188188

189189
@Override
190190
public void checkCanSelectFromTable(
191-
String userName, QualifiedObjectName tableName, IAuditEntity auditEntity) {}
191+
String userName, QualifiedObjectName tableName, IAuditEntity auditEntity) {
192+
throw new AccessDeniedException(
193+
NO_PERMISSION_PROMOTION
194+
+ PrivilegeType.SELECT
195+
+ " ON "
196+
+ tableName.getDatabaseName()
197+
+ "."
198+
+ tableName.getObjectName());
199+
}
192200

193201
@Override
194202
public void checkCanSelectFromDatabase4Pipe(

0 commit comments

Comments
 (0)