This is an automated email from the ASF dual-hosted git repository. zike pushed a commit to branch branch-0.13.0 in repository https://gitbox.apache.org/repos/asf/pulsar-client-go.git
commit 8d3177d6aae08119fbc4b8b52c211cb38a228ce7 Author: 码斯克 <736090...@qq.com> AuthorDate: Mon Jul 22 18:37:00 2024 +0800 fix pulsar admin revoke subscription permission endpoint (#1251) * fix pulsar admin revoke subscription permission endpoint * feat: support get subscription permissions and add test case * feat: remove fmt package --------- Co-authored-by: haotao chen <haotao.c...@shopee.com> (cherry picked from commit df6a15c8548271f521d9615871899bd8d8678ed1) --- pulsaradmin/pkg/admin/namespace.go | 12 +++++++++++- pulsaradmin/pkg/admin/namespace_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/pulsaradmin/pkg/admin/namespace.go b/pulsaradmin/pkg/admin/namespace.go index 782ae3ae..efe458ee 100644 --- a/pulsaradmin/pkg/admin/namespace.go +++ b/pulsaradmin/pkg/admin/namespace.go @@ -200,6 +200,9 @@ type Namespaces interface { // RevokeSubPermission revoke permissions on a subscription's admin-api access RevokeSubPermission(namespace utils.NameSpaceName, sName, role string) error + // GetSubPermissions returns subscription permissions on a namespace + GetSubPermissions(namespace utils.NameSpaceName) (map[string][]string, error) + // SetSubscriptionAuthMode sets the given subscription auth mode on all topics on a namespace SetSubscriptionAuthMode(namespace utils.NameSpaceName, mode utils.SubscriptionAuthMode) error @@ -750,10 +753,17 @@ func (n *namespaces) GrantSubPermission(namespace utils.NameSpaceName, sName str func (n *namespaces) RevokeSubPermission(namespace utils.NameSpaceName, sName, role string) error { endpoint := n.pulsar.endpoint(n.basePath, namespace.String(), "permissions", - "subscription", sName, role) + sName, role) return n.pulsar.Client.Delete(endpoint) } +func (n *namespaces) GetSubPermissions(namespace utils.NameSpaceName) (map[string][]string, error) { + endpoint := n.pulsar.endpoint(n.basePath, namespace.String(), "permissions", "subscription") + var permissions map[string][]string + err := n.pulsar.Client.Get(endpoint, &permissions) + return permissions, err +} + func (n *namespaces) SetSubscriptionAuthMode(namespace utils.NameSpaceName, mode utils.SubscriptionAuthMode) error { endpoint := n.pulsar.endpoint(n.basePath, namespace.String(), "subscriptionAuthMode") return n.pulsar.Client.Post(endpoint, mode.String()) diff --git a/pulsaradmin/pkg/admin/namespace_test.go b/pulsaradmin/pkg/admin/namespace_test.go index f934a968..941f6127 100644 --- a/pulsaradmin/pkg/admin/namespace_test.go +++ b/pulsaradmin/pkg/admin/namespace_test.go @@ -173,3 +173,31 @@ func TestGetTopicAutoCreation(t *testing.T) { } assert.Equal(t, expected, *topicAutoCreation) } + +func TestRevokeSubPermission(t *testing.T) { + config := &config.Config{} + admin, err := New(config) + require.NoError(t, err) + require.NotNil(t, admin) + + namespace, err := utils.GetNamespaceName("public/default") + require.NoError(t, err) + require.NotNil(t, namespace) + + sub := "subscription" + roles := []string{"user"} + + // grant subscription permission and get it + err = admin.Namespaces().GrantSubPermission(*namespace, sub, roles) + require.NoError(t, err) + permissions, err := admin.Namespaces().GetSubPermissions(*namespace) + require.NoError(t, err) + assert.Equal(t, roles, permissions[sub]) + + // revoke subscription permission and get it + err = admin.Namespaces().RevokeSubPermission(*namespace, sub, roles[0]) + require.NoError(t, err) + permissions, err = admin.Namespaces().GetSubPermissions(*namespace) + require.NoError(t, err) + assert.Equal(t, 0, len(permissions[sub])) +}