From 80d3e91791b3b8acc4f47a83f1d5aa7d03e0b349 Mon Sep 17 00:00:00 2001 From: Rao Yunkun Date: Mon, 10 May 2021 15:19:26 +0800 Subject: [PATCH] Fixed namespace resource filter. Signed-off-by: Rao Yunkun --- pkg/models/tenant/metering.go | 62 ++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/pkg/models/tenant/metering.go b/pkg/models/tenant/metering.go index 57da981fc..db07fc692 100644 --- a/pkg/models/tenant/metering.go +++ b/pkg/models/tenant/metering.go @@ -259,40 +259,42 @@ func (t *tenantOperator) makeQueryOptions(user user.Info, q meteringv1alpha1.Que } } - if q.NamespaceName != "" { - nsOption.ResourceFilter = q.NamespaceName - } else { - var nsList *api.ListResult - qu := query.New() - qu.LabelSelector = q.LabelSelector - nsList, err = t.ListNamespaces(user, q.WorkspaceName, qu) - if err != nil { - return qo, err - } + if nsOption.ResourceFilter == "" { + if q.NamespaceName != "" { + nsOption.ResourceFilter = q.NamespaceName + } else { + var nsList *api.ListResult + qu := query.New() + qu.LabelSelector = q.LabelSelector + nsList, err = t.ListNamespaces(user, q.WorkspaceName, qu) + if err != nil { + return qo, err + } - targetNs := []string{} - for _, item := range nsList.Items { - ns := item.(*corev1.Namespace) - if ok, _ := regexp.MatchString(q.ResourceFilter, ns.ObjectMeta.GetName()); ok { - listPods = authorizer.AttributesRecord{ - User: user, - Verb: "list", - Resource: "pods", - Namespace: ns.ObjectMeta.GetName(), - ResourceScope: request.NamespaceScope, - ResourceRequest: true, - } - decision, _, err = t.authorizer.Authorize(listPods) - if err != nil { - klog.Error(err) - return - } - if decision == authorizer.DecisionAllow { - targetNs = append(targetNs, ns.ObjectMeta.GetName()) + targetNs := []string{} + for _, item := range nsList.Items { + ns := item.(*corev1.Namespace) + if ok, _ := regexp.MatchString(q.ResourceFilter, ns.ObjectMeta.GetName()); ok { + listPods = authorizer.AttributesRecord{ + User: user, + Verb: "list", + Resource: "pods", + Namespace: ns.ObjectMeta.GetName(), + ResourceScope: request.NamespaceScope, + ResourceRequest: true, + } + decision, _, err = t.authorizer.Authorize(listPods) + if err != nil { + klog.Error(err) + return + } + if decision == authorizer.DecisionAllow { + targetNs = append(targetNs, ns.ObjectMeta.GetName()) + } } } + nsOption.ResourceFilter = strings.Join(targetNs, "|") } - nsOption.ResourceFilter = strings.Join(targetNs, "|") } qo.Option = nsOption