1919
2020package org .apache .iotdb .confignode .manager .pipe .source ;
2121
22+ import org .apache .iotdb .common .rpc .thrift .TSStatus ;
23+ import org .apache .iotdb .commons .auth .entity .PrivilegeType ;
2224import org .apache .iotdb .commons .auth .entity .PrivilegeUnion ;
2325import org .apache .iotdb .commons .exception .MetadataException ;
2426import org .apache .iotdb .commons .utils .StatusUtils ;
27+ import org .apache .iotdb .confignode .consensus .request .ConfigPhysicalPlanType ;
28+ import org .apache .iotdb .confignode .consensus .request .write .database .DatabaseSchemaPlan ;
2529import org .apache .iotdb .confignode .manager .ConfigManager ;
2630import org .apache .iotdb .confignode .manager .PermissionManager ;
31+ import org .apache .iotdb .confignode .rpc .thrift .TDatabaseSchema ;
2732import org .apache .iotdb .confignode .rpc .thrift .TPermissionInfoResp ;
2833import org .apache .iotdb .confignode .service .ConfigNode ;
2934import org .apache .iotdb .db .exception .StorageEngineException ;
35+ import org .apache .iotdb .rpc .TSStatusCode ;
3036
3137import org .apache .tsfile .exception .write .WriteProcessException ;
3238import org .junit .After ;
3541import org .junit .Test ;
3642
3743import java .io .IOException ;
44+ import java .util .function .BiFunction ;
3845
3946public class PipeConfigTreePrivilegeParseVisitorTest {
4047
@@ -44,14 +51,15 @@ public class PipeConfigTreePrivilegeParseVisitorTest {
4451 new PipeConfigTreePrivilegeParseVisitor (false );
4552
4653 private ConfigNode oldInstance ;
54+ private final TestPermissionManager permissionManager = new TestPermissionManager ();
4755
4856 @ Before
4957 public void setUp ()
5058 throws IOException , WriteProcessException , MetadataException , InterruptedException {
5159 oldInstance = ConfigNode .getInstance ();
5260 ConfigNode .setInstance (new ConfigNode ());
5361 final ConfigManager configManager = new ConfigManager ();
54- configManager .setPermissionManager (new TestPermissionManager () );
62+ configManager .setPermissionManager (permissionManager );
5563 ConfigNode .getInstance ().setConfigManager (configManager );
5664 }
5765
@@ -61,19 +69,44 @@ public void tearDown() throws IOException, StorageEngineException {
6169 }
6270
6371 @ Test
64- public void testCreateDatabase () {
72+ public void testCanReadSysSchema () {
73+ permissionManager .setUserPrivilege (
74+ (userName , privilegeUnion ) -> privilegeUnion .getPrivilegeType () == PrivilegeType .SYSTEM );
6575 Assert .assertTrue (skipVisitor .canReadSysSchema ("root.db" , null , true ));
76+
77+ permissionManager .setUserPrivilege (
78+ (userName , privilegeUnion ) ->
79+ privilegeUnion .getPrivilegeType () == PrivilegeType .READ_SCHEMA
80+ && privilegeUnion .getPath ().equals ("root.db" ));
81+ Assert .assertTrue (skipVisitor .canReadSysSchema ("root.db" , null , true ));
82+ Assert .assertFalse (
83+ throwVisitor
84+ .visitCreateDatabase (
85+ new DatabaseSchemaPlan (
86+ ConfigPhysicalPlanType .CreateDatabase , new TDatabaseSchema ("root.db1" )),
87+ null )
88+ .isPresent ());
6689 }
6790
6891 private static class TestPermissionManager extends PermissionManager {
92+
93+ private BiFunction <String , PrivilegeUnion , Boolean > checkUserPrivileges =
94+ (userName , privilegeUnion ) -> true ;
95+
6996 public TestPermissionManager () {
7097 super (null , null );
7198 }
7299
73100 @ Override
74101 public TPermissionInfoResp checkUserPrivileges (
75102 final String username , final PrivilegeUnion union ) {
76- return new TPermissionInfoResp (StatusUtils .OK );
103+ return checkUserPrivileges .apply (username , union )
104+ ? new TPermissionInfoResp (StatusUtils .OK )
105+ : new TPermissionInfoResp (new TSStatus (TSStatusCode .NO_PERMISSION .getStatusCode ()));
106+ }
107+
108+ void setUserPrivilege (final BiFunction <String , PrivilegeUnion , Boolean > checkUserPrivileges ) {
109+ this .checkUserPrivileges = checkUserPrivileges ;
77110 }
78111 }
79112}
0 commit comments