|
35 | 35 | import org.apache.polaris.core.entity.PolarisEntityType;
|
36 | 36 | import org.apache.polaris.core.entity.PolarisGrantRecord;
|
37 | 37 | import org.apache.polaris.core.entity.PolarisPrincipalSecrets;
|
| 38 | +import org.apache.polaris.core.policy.PolarisPolicyMappingRecord; |
38 | 39 | import org.apache.polaris.jpa.models.ModelEntity;
|
39 | 40 | import org.apache.polaris.jpa.models.ModelEntityActive;
|
40 | 41 | import org.apache.polaris.jpa.models.ModelEntityChangeTracking;
|
41 | 42 | import org.apache.polaris.jpa.models.ModelGrantRecord;
|
| 43 | +import org.apache.polaris.jpa.models.ModelPolicyMappingRecord; |
42 | 44 | import org.apache.polaris.jpa.models.ModelPrincipalSecrets;
|
43 | 45 | import org.slf4j.Logger;
|
44 | 46 | import org.slf4j.LoggerFactory;
|
@@ -411,6 +413,121 @@ void deletePrincipalSecrets(EntityManager session, String clientId) {
|
411 | 413 | session.remove(modelPrincipalSecrets);
|
412 | 414 | }
|
413 | 415 |
|
| 416 | + void writeToPolicyMappingRecords( |
| 417 | + EntityManager session, PolarisPolicyMappingRecord mappingRecord) { |
| 418 | + diagnosticServices.check(session != null, "session_is_null"); |
| 419 | + checkInitialized(); |
| 420 | + |
| 421 | + session.persist(ModelPolicyMappingRecord.fromPolicyMappingRecord(mappingRecord)); |
| 422 | + } |
| 423 | + |
| 424 | + void deleteFromPolicyMappingRecords( |
| 425 | + EntityManager session, PolarisPolicyMappingRecord mappingRecord) { |
| 426 | + diagnosticServices.check(session != null, "session_is_null"); |
| 427 | + checkInitialized(); |
| 428 | + |
| 429 | + ModelPolicyMappingRecord lookupPolicyMappingRecord = |
| 430 | + lookupPolicyMappingRecord( |
| 431 | + session, |
| 432 | + mappingRecord.getTargetCatalogId(), |
| 433 | + mappingRecord.getTargetId(), |
| 434 | + mappingRecord.getPolicyTypeCode(), |
| 435 | + mappingRecord.getPolicyCatalogId(), |
| 436 | + mappingRecord.getPolicyId()); |
| 437 | + |
| 438 | + diagnosticServices.check(lookupPolicyMappingRecord != null, "policy_mapping_record_not_found"); |
| 439 | + session.remove(lookupPolicyMappingRecord); |
| 440 | + } |
| 441 | + |
| 442 | + void deleteAllEntityPolicyMappingRecords(EntityManager session, PolarisEntityCore entity) { |
| 443 | + diagnosticServices.check(session != null, "session_is_null"); |
| 444 | + checkInitialized(); |
| 445 | + |
| 446 | + loadAllPoliciesOnPolicy(session, entity.getCatalogId(), entity.getId()) |
| 447 | + .forEach(session::remove); |
| 448 | + loadAllPoliciesOnTarget(session, entity.getCatalogId(), entity.getId()) |
| 449 | + .forEach(session::remove); |
| 450 | + } |
| 451 | + |
| 452 | + ModelPolicyMappingRecord lookupPolicyMappingRecord( |
| 453 | + EntityManager session, |
| 454 | + long targetCatalogId, |
| 455 | + long targetId, |
| 456 | + long policyTypeCode, |
| 457 | + long policyCatalogId, |
| 458 | + long policyId) { |
| 459 | + diagnosticServices.check(session != null, "session_is_null"); |
| 460 | + checkInitialized(); |
| 461 | + |
| 462 | + return session |
| 463 | + .createQuery( |
| 464 | + "SELECT m from ModelPolicyMappingRecord m " |
| 465 | + + "where m.targetCatalogId=:targetCatalogId " |
| 466 | + + "and m.targetId=:targetId " |
| 467 | + + "and m.policyTypeCode=:policyTypeCode " |
| 468 | + + "and m.policyCatalogId=:policyCatalogId " |
| 469 | + + "and m.policyId=:policyId", |
| 470 | + ModelPolicyMappingRecord.class) |
| 471 | + .setParameter("targetCatalogId", targetCatalogId) |
| 472 | + .setParameter("targetId", targetId) |
| 473 | + .setParameter("policyTypeCode", policyTypeCode) |
| 474 | + .setParameter("policyCatalogId", policyCatalogId) |
| 475 | + .setParameter("policyId", policyId) |
| 476 | + .getResultStream() |
| 477 | + .findFirst() |
| 478 | + .orElse(null); |
| 479 | + } |
| 480 | + |
| 481 | + List<ModelPolicyMappingRecord> loadPoliciesOnTargetByType( |
| 482 | + EntityManager session, long targetCatalogId, long targetId, int policyTypeCode) { |
| 483 | + diagnosticServices.check(session != null, "session_is_null"); |
| 484 | + checkInitialized(); |
| 485 | + |
| 486 | + return session |
| 487 | + .createQuery( |
| 488 | + "SELECT m from ModelPolicyMappingRecord m " |
| 489 | + + "where m.targetCatalogId=:targetCatalogId " |
| 490 | + + "and m.targetId=:targetId " |
| 491 | + + "and m.policyTypeCode=:policyTypeCode", |
| 492 | + ModelPolicyMappingRecord.class) |
| 493 | + .setParameter("targetCatalogId", targetCatalogId) |
| 494 | + .setParameter("targetId", targetId) |
| 495 | + .setParameter("policyTypeCode", policyTypeCode) |
| 496 | + .getResultList(); |
| 497 | + } |
| 498 | + |
| 499 | + List<ModelPolicyMappingRecord> loadAllPoliciesOnTarget( |
| 500 | + EntityManager session, long targetCatalogId, long targetId) { |
| 501 | + diagnosticServices.check(session != null, "session_is_null"); |
| 502 | + checkInitialized(); |
| 503 | + |
| 504 | + return session |
| 505 | + .createQuery( |
| 506 | + "SELECT m from ModelPolicyMappingRecord m " |
| 507 | + + " where m.targetCatalogId=:targetCatalogId " |
| 508 | + + "and m.targetId=:targetId", |
| 509 | + ModelPolicyMappingRecord.class) |
| 510 | + .setParameter("targetCatalogId", targetCatalogId) |
| 511 | + .setParameter("targetId", targetId) |
| 512 | + .getResultList(); |
| 513 | + } |
| 514 | + |
| 515 | + List<ModelPolicyMappingRecord> loadAllPoliciesOnPolicy( |
| 516 | + EntityManager session, long policyCatalogId, long policyId) { |
| 517 | + diagnosticServices.check(session != null, "session_is_null"); |
| 518 | + checkInitialized(); |
| 519 | + |
| 520 | + return session |
| 521 | + .createQuery( |
| 522 | + "SELECT m from ModelPolicyMappingRecord m " |
| 523 | + + "where m.policyCatalogId=:policyCatalogId " |
| 524 | + + "and m.policyId=:policyId", |
| 525 | + ModelPolicyMappingRecord.class) |
| 526 | + .setParameter("policyCatalogId", policyCatalogId) |
| 527 | + .setParameter("policyId", policyId) |
| 528 | + .getResultList(); |
| 529 | + } |
| 530 | + |
414 | 531 | private void checkInitialized() {
|
415 | 532 | diagnosticServices.check(this.initialized.get(), "store_not_initialized");
|
416 | 533 | }
|
|
0 commit comments