From d44bf32fad36909ab5e414e4920bba368d1bd00f Mon Sep 17 00:00:00 2001 From: Fabio Bozzo Date: Mon, 21 Oct 2024 16:39:19 +0200 Subject: [PATCH] adapt KindAll too --- pkg/policy/match.go | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/pkg/policy/match.go b/pkg/policy/match.go index 6124cd7..1c0feec 100644 --- a/pkg/policy/match.go +++ b/pkg/policy/match.go @@ -121,15 +121,38 @@ func matchStatement(statement Statement, node ipld.Node) bool { } case KindAll: if s, ok := statement.(quantifier); ok { - _, many, err := s.selector.Select(node) - if err != nil || len(many) == 0 { + one, many, err := s.selector.Select(node) + if err != nil { return false } - for _, n := range many { - ok := matchStatement(s.statement, n) - if !ok { - return false + if one != nil { + it := one.ListIterator() + if it != nil { + for !it.Done() { + _, v, err := it.Next() + if err != nil { + return false + } + ok := matchStatement(s.statement, v) + if !ok { + return false + } + } + } else { + ok := matchStatement(s.statement, one) + if !ok { + return false + } + } + } + + if len(many) > 0 { + for _, n := range many { + ok := matchStatement(s.statement, n) + if !ok { + return false + } } }