diff --git a/pkg/util/rbac/rbac.go b/pkg/util/rbac/rbac.go index a149a51af..b5d1f2d52 100644 --- a/pkg/util/rbac/rbac.go +++ b/pkg/util/rbac/rbac.go @@ -18,6 +18,7 @@ package rbac import ( rbacv1 "k8s.io/api/rbac/v1" + "k8s.io/apimachinery/pkg/util/sets" "reflect" "strings" ) @@ -42,7 +43,13 @@ func CompactRules(rules []rbacv1.PolicyRule) ([]rbacv1.PolicyRule, error) { if existingRule.Verbs == nil { existingRule.Verbs = []string{} } - existingRule.Verbs = append(existingRule.Verbs, rule.Verbs...) + existingVerbs := sets.NewString(existingRule.Verbs...) + for _, verb := range rule.Verbs { + if !existingVerbs.Has(verb) { + existingRule.Verbs = append(existingRule.Verbs, verb) + } + } + } else { // Copy the rule to accumulate matching simple resource rules into simpleRules[resource] = rule.DeepCopy()