privilege_group_test.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. // Licensed to the LF AI & Data foundation under one
  2. // or more contributor license agreements. See the NOTICE file
  3. // distributed with this work for additional information
  4. // regarding copyright ownership. The ASF licenses this file
  5. // to you under the Apache License, Version 2.0 (the
  6. // "License"); you may not use this file except in compliance
  7. // with the License. You may obtain a copy of the License at
  8. //
  9. // http://www.apache.org/licenses/LICENSE-2.0
  10. //
  11. // Unless required by applicable law or agreed to in writing, software
  12. // distributed under the License is distributed on an "AS IS" BASIS,
  13. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. // See the License for the specific language governing permissions and
  15. // limitations under the License.
  16. package rbac
  17. import (
  18. "context"
  19. "testing"
  20. "github.com/stretchr/testify/suite"
  21. "github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
  22. "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
  23. "github.com/milvus-io/milvus/pkg/util"
  24. "github.com/milvus-io/milvus/pkg/util/merr"
  25. "github.com/milvus-io/milvus/pkg/util/paramtable"
  26. "github.com/milvus-io/milvus/tests/integration"
  27. )
  28. type PrivilegeGroupTestSuite struct {
  29. integration.MiniClusterSuite
  30. }
  31. func (s *PrivilegeGroupTestSuite) SetupSuite() {
  32. s.MiniClusterSuite.SetupSuite()
  33. paramtable.Init()
  34. paramtable.Get().Save(paramtable.Get().QueryCoordCfg.BalanceCheckInterval.Key, "1000")
  35. paramtable.Get().Save(paramtable.Get().QueryNodeCfg.GracefulStopTimeout.Key, "1")
  36. paramtable.Get().Save(paramtable.Get().CommonCfg.AuthorizationEnabled.Key, "true")
  37. }
  38. func (s *PrivilegeGroupTestSuite) TestPrivilegeGroup() {
  39. ctx := GetContext(context.Background(), "root:123456")
  40. // test empty rbac content
  41. resp, err := s.Cluster.Proxy.BackupRBAC(ctx, &milvuspb.BackupRBACMetaRequest{})
  42. s.NoError(err)
  43. s.True(merr.Ok(resp.GetStatus()))
  44. s.Equal("", resp.GetRBACMeta().String())
  45. // generate some rbac content
  46. roleName := "test_role"
  47. resp1, err := s.Cluster.Proxy.CreateRole(ctx, &milvuspb.CreateRoleRequest{
  48. Entity: &milvuspb.RoleEntity{
  49. Name: roleName,
  50. },
  51. })
  52. s.NoError(err)
  53. s.True(merr.Ok(resp1))
  54. resp2, err := s.Cluster.Proxy.OperatePrivilege(ctx, &milvuspb.OperatePrivilegeRequest{
  55. Type: milvuspb.OperatePrivilegeType_Grant,
  56. Entity: &milvuspb.GrantEntity{
  57. Role: &milvuspb.RoleEntity{Name: roleName},
  58. Object: &milvuspb.ObjectEntity{Name: commonpb.ObjectType_Collection.String()},
  59. ObjectName: util.AnyWord,
  60. DbName: util.AnyWord,
  61. Grantor: &milvuspb.GrantorEntity{
  62. User: &milvuspb.UserEntity{Name: util.UserRoot},
  63. Privilege: &milvuspb.PrivilegeEntity{Name: "ReadOnly"},
  64. },
  65. },
  66. })
  67. s.NoError(err)
  68. s.True(merr.Ok(resp2))
  69. resp3, err := s.Cluster.Proxy.OperatePrivilege(ctx, &milvuspb.OperatePrivilegeRequest{
  70. Type: milvuspb.OperatePrivilegeType_Grant,
  71. Entity: &milvuspb.GrantEntity{
  72. Role: &milvuspb.RoleEntity{Name: roleName},
  73. Object: &milvuspb.ObjectEntity{Name: commonpb.ObjectType_Collection.String()},
  74. ObjectName: util.AnyWord,
  75. DbName: util.AnyWord,
  76. Grantor: &milvuspb.GrantorEntity{
  77. User: &milvuspb.UserEntity{Name: util.UserRoot},
  78. Privilege: &milvuspb.PrivilegeEntity{Name: "ReadWrite"},
  79. },
  80. },
  81. })
  82. s.NoError(err)
  83. s.True(merr.Ok(resp3))
  84. resp4, err := s.Cluster.Proxy.OperatePrivilege(ctx, &milvuspb.OperatePrivilegeRequest{
  85. Type: milvuspb.OperatePrivilegeType_Grant,
  86. Entity: &milvuspb.GrantEntity{
  87. Role: &milvuspb.RoleEntity{Name: roleName},
  88. Object: &milvuspb.ObjectEntity{Name: commonpb.ObjectType_Global.String()},
  89. ObjectName: util.AnyWord,
  90. DbName: util.AnyWord,
  91. Grantor: &milvuspb.GrantorEntity{
  92. User: &milvuspb.UserEntity{Name: util.UserRoot},
  93. Privilege: &milvuspb.PrivilegeEntity{Name: "Admin"},
  94. },
  95. },
  96. })
  97. s.NoError(err)
  98. s.True(merr.Ok(resp4))
  99. resp5, err := s.Cluster.Proxy.SelectGrant(ctx, &milvuspb.SelectGrantRequest{
  100. Entity: &milvuspb.GrantEntity{
  101. Role: &milvuspb.RoleEntity{Name: roleName},
  102. Object: &milvuspb.ObjectEntity{Name: commonpb.ObjectType_Global.String()},
  103. ObjectName: util.AnyWord,
  104. DbName: util.AnyWord,
  105. },
  106. })
  107. s.NoError(err)
  108. s.True(merr.Ok(resp5.GetStatus()))
  109. s.Len(resp5.GetEntities(), 1)
  110. resp6, err := s.Cluster.Proxy.SelectGrant(ctx, &milvuspb.SelectGrantRequest{
  111. Entity: &milvuspb.GrantEntity{
  112. Role: &milvuspb.RoleEntity{Name: roleName},
  113. Object: &milvuspb.ObjectEntity{Name: commonpb.ObjectType_Collection.String()},
  114. ObjectName: util.AnyWord,
  115. DbName: util.AnyWord,
  116. },
  117. })
  118. s.NoError(err)
  119. s.True(merr.Ok(resp6.GetStatus()))
  120. s.Len(resp6.GetEntities(), 2)
  121. }
  122. func TestPrivilegeGroup(t *testing.T) {
  123. suite.Run(t, new(PrivilegeGroupTestSuite))
  124. }