MCPcopy Create free account
hub / github.com/rilldata/rill / applySecurityRuleRowFilter

Method applySecurityRuleRowFilter

runtime/security.go:688–723  ·  view source on GitHub ↗

applySecurityRuleRowFilter applies a row filter rule to the resolved security.

(res *ResolvedSecurity, r *runtimev1.Resource, rule *runtimev1.SecurityRuleRowFilter, td parser.TemplateData)

Source from the content-addressed store, hash-verified

686
687// applySecurityRuleRowFilter applies a row filter rule to the resolved security.
688func (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.

Callers 1

resolveSecurityMethod · 0.95

Calls 3

ResolveTemplateFunction · 0.92
AndAllFunction · 0.92
evaluateConditionsFunction · 0.85

Tested by

no test coverage detected