|
82 | 82 | import org.apache.iotdb.confignode.consensus.request.write.table.view.SetViewCommentPlan; |
83 | 83 | import org.apache.iotdb.confignode.consensus.request.write.table.view.SetViewPropertiesPlan; |
84 | 84 | import org.apache.iotdb.confignode.consensus.request.write.template.CommitSetSchemaTemplatePlan; |
| 85 | +import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchemaTemplatePlan; |
85 | 86 | import org.apache.iotdb.confignode.consensus.request.write.template.ExtendSchemaTemplatePlan; |
86 | 87 | import org.apache.iotdb.confignode.consensus.request.write.trigger.DeleteTriggerInTablePlan; |
87 | 88 | import org.apache.iotdb.confignode.manager.ConfigManager; |
|
146 | 147 | import java.util.concurrent.atomic.AtomicInteger; |
147 | 148 |
|
148 | 149 | import static org.apache.iotdb.confignode.manager.pipe.source.PipeConfigTreePrivilegeParseVisitor.checkGlobalStatus; |
| 150 | +import static org.apache.iotdb.confignode.manager.pipe.source.PipeConfigTreePrivilegeParseVisitor.checkPathsStatus; |
149 | 151 |
|
150 | 152 | public class IoTDBConfigNodeReceiver extends IoTDBFileReceiver { |
151 | 153 |
|
@@ -296,6 +298,7 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti |
296 | 298 | } |
297 | 299 |
|
298 | 300 | String database; |
| 301 | + String templateName; |
299 | 302 | switch (plan.getType()) { |
300 | 303 | case CreateDatabase: |
301 | 304 | database = ((DatabaseSchemaPlan) plan).getSchema().getName(); |
@@ -331,23 +334,22 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti |
331 | 334 | ((ExtendSchemaTemplatePlan) plan).getTemplateExtendInfo().getTemplateName(), |
332 | 335 | true); |
333 | 336 | case CreateSchemaTemplate: |
| 337 | + templateName = ((CreateSchemaTemplatePlan) plan).getTemplate().getName(); |
| 338 | + return checkGlobalStatus(userEntity, PrivilegeType.SYSTEM, templateName, true); |
334 | 339 | case CommitSetSchemaTemplate: |
| 340 | + templateName = ((CommitSetSchemaTemplatePlan) plan).getName(); |
| 341 | + return checkGlobalStatus(userEntity, PrivilegeType.SYSTEM, templateName, true); |
335 | 342 | case PipeUnsetTemplate: |
336 | | - return CommonDescriptor.getInstance().getConfig().getDefaultAdminName().equals(username) |
337 | | - ? StatusUtils.OK |
338 | | - : new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode()) |
339 | | - .setMessage("Only the admin user can perform this operation"); |
| 343 | + templateName = ((PipeUnsetSchemaTemplatePlan) plan).getName(); |
| 344 | + return checkGlobalStatus(userEntity, PrivilegeType.SYSTEM, templateName, true); |
340 | 345 | case PipeDeleteTimeSeries: |
341 | | - return configManager |
342 | | - .checkUserPrivileges( |
343 | | - username, |
344 | | - new PrivilegeUnion( |
345 | | - new ArrayList<>( |
346 | | - PathPatternTree.deserialize( |
347 | | - ((PipeDeleteTimeSeriesPlan) plan).getPatternTreeBytes()) |
348 | | - .getAllPathPatterns()), |
349 | | - PrivilegeType.WRITE_SCHEMA)) |
350 | | - .getStatus(); |
| 346 | + return checkPathsStatus( |
| 347 | + userEntity, |
| 348 | + PrivilegeType.WRITE_SCHEMA, |
| 349 | + new ArrayList<>( |
| 350 | + PathPatternTree.deserialize(((PipeDeleteTimeSeriesPlan) plan).getPatternTreeBytes()) |
| 351 | + .getAllPathPatterns()), |
| 352 | + true); |
351 | 353 | case PipeAlterEncodingCompressor: |
352 | 354 | // Judge here in the future |
353 | 355 | if (configManager |
@@ -376,37 +378,30 @@ private TSStatus checkPermission(final ConfigPhysicalPlan plan) throws IOExcepti |
376 | 378 | .serialize()); |
377 | 379 | return StatusUtils.OK; |
378 | 380 | } else { |
379 | | - return configManager |
380 | | - .checkUserPrivileges( |
381 | | - username, |
382 | | - new PrivilegeUnion( |
383 | | - new ArrayList<>( |
384 | | - PathPatternTree.deserialize( |
385 | | - ((PipeAlterEncodingCompressorPlan) plan).getPatternTreeBytes()) |
386 | | - .getAllPathPatterns()), |
387 | | - PrivilegeType.WRITE_SCHEMA)) |
388 | | - .getStatus(); |
| 381 | + return checkPathsStatus( |
| 382 | + userEntity, |
| 383 | + PrivilegeType.WRITE_SCHEMA, |
| 384 | + new ArrayList<>( |
| 385 | + PathPatternTree.deserialize( |
| 386 | + ((PipeAlterEncodingCompressorPlan) plan).getPatternTreeBytes()) |
| 387 | + .getAllPathPatterns()), |
| 388 | + true); |
389 | 389 | } |
390 | 390 | case PipeDeleteLogicalView: |
391 | | - return configManager |
392 | | - .checkUserPrivileges( |
393 | | - username, |
394 | | - new PrivilegeUnion( |
395 | | - new ArrayList<>( |
396 | | - PathPatternTree.deserialize( |
397 | | - ((PipeDeleteLogicalViewPlan) plan).getPatternTreeBytes()) |
398 | | - .getAllPathPatterns()), |
399 | | - PrivilegeType.WRITE_SCHEMA)) |
400 | | - .getStatus(); |
| 391 | + return checkPathsStatus( |
| 392 | + userEntity, |
| 393 | + PrivilegeType.WRITE_SCHEMA, |
| 394 | + new ArrayList<>( |
| 395 | + PathPatternTree.deserialize( |
| 396 | + ((PipeDeleteLogicalViewPlan) plan).getPatternTreeBytes()) |
| 397 | + .getAllPathPatterns()), |
| 398 | + true); |
401 | 399 | case PipeDeactivateTemplate: |
402 | | - return configManager |
403 | | - .checkUserPrivileges( |
404 | | - username, |
405 | | - new PrivilegeUnion( |
406 | | - new ArrayList<>( |
407 | | - ((PipeDeactivateTemplatePlan) plan).getTemplateSetInfo().keySet()), |
408 | | - PrivilegeType.WRITE_SCHEMA)) |
409 | | - .getStatus(); |
| 400 | + return checkPathsStatus( |
| 401 | + userEntity, |
| 402 | + PrivilegeType.WRITE_SCHEMA, |
| 403 | + new ArrayList<>(((PipeDeactivateTemplatePlan) plan).getTemplateSetInfo().keySet()), |
| 404 | + true); |
410 | 405 | case SetTTL: |
411 | 406 | return Objects.equals( |
412 | 407 | configManager |
|
0 commit comments