applySecurityRuleRowFilter applies a row filter rule to the resolved security.
(res *ResolvedSecurity, r *runtimev1.Resource, rule *runtimev1.SecurityRuleRowFilter, td parser.TemplateData)
| 686 | |
| 687 | // applySecurityRuleRowFilter applies a row filter rule to the resolved security. |
| 688 | func (p *securityEngine) applySecurityRuleRowFilter(res *ResolvedSecurity, r *runtimev1.Resource, rule *runtimev1.SecurityRuleRowFilter, td parser.TemplateData) error { |
| 689 | // Determine if the rule should be applied |
| 690 | apply, err := evaluateConditions(r, rule.ConditionExpression, rule.ConditionKinds, rule.ConditionResources, td) |
| 691 | if err != nil { |
| 692 | return err |
| 693 | } |
| 694 | if apply != nil && !*apply { |
| 695 | // there are conditions but not applicable |
| 696 | return nil |
| 697 | } |
| 698 | |
| 699 | // Handle raw SQL row filters |
| 700 | if rule.Sql != "" { |
| 701 | sql, err := parser.ResolveTemplate(rule.Sql, td, false) |
| 702 | if err != nil { |
| 703 | return err |
| 704 | } |
| 705 | |
| 706 | if res.rowFilter == "" { |
| 707 | res.rowFilter = sql |
| 708 | } else { |
| 709 | res.rowFilter = fmt.Sprintf("(%s) AND (%s)", res.rowFilter, sql) |
| 710 | } |
| 711 | } |
| 712 | |
| 713 | // Handle query expression filters |
| 714 | if rule.Expression != nil { |
| 715 | if res.queryFilter == nil { |
| 716 | res.queryFilter = rule.Expression |
| 717 | } else { |
| 718 | res.queryFilter = expressionpb.AndAll(res.queryFilter, rule.Expression) |
| 719 | } |
| 720 | } |
| 721 | |
| 722 | return nil |
| 723 | } |
| 724 | |
| 725 | // expandTransitiveAccessRules expands any transitive access rules in the provided list of rules. |
| 726 | // This involves looking up the referenced resource, determining its dependencies, and adding the necessary access rules for those dependencies. |
no test coverage detected