Skip to content

Commit

Permalink
RBAC privielge group API
Browse files Browse the repository at this point in the history
Signed-off-by: shaoting-huang <[email protected]>
  • Loading branch information
shaoting-huang committed Nov 12, 2024
1 parent 1b1dd47 commit d472ccd
Show file tree
Hide file tree
Showing 7 changed files with 422 additions and 10 deletions.
9 changes: 9 additions & 0 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,15 @@ type Client interface {
BackupRBAC(ctx context.Context) (*entity.RBACMeta, error)
RestoreRBAC(ctx context.Context, meta *entity.RBACMeta) error

// CreatePrivilegeGroup creates a privilege group
CreatePrivilegeGroup(ctx context.Context, groupName string) error
// DropPrivilegeGroup drops the specified privilege group
DropPrivilegeGroup(ctx context.Context, groupName string) error
// ListPrivilegeGroups lists all privilege groups
ListPrivilegeGroups(ctx context.Context) ([]*entity.PrivilegeGroup, error)
// OperatePrivilegeGroup adds privileges to a privilege group or remove privileges from a privilege group
OperatePrivilegeGroup(ctx context.Context, groupName string, privileges []string) error

// -- authentication --

// CreateCredential create new user and password
Expand Down
42 changes: 42 additions & 0 deletions client/client_mock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,11 @@ const (
MReplicateMessage ServiceMethod = 1100
MBackupRBAC ServiceMethod = 1101
MRestoreRBAC ServiceMethod = 1102

MCreatePrivilegeGroup ServiceMethod = 1200
MDropPrivilegeGroup ServiceMethod = 1201
MListPrivilegeGroups ServiceMethod = 1202
MOperatePrivilegeGroup ServiceMethod = 1203
)

// injection function definition
Expand Down Expand Up @@ -1079,3 +1084,40 @@ func (m *MockServer) RestoreRBAC(ctx context.Context, req *milvuspb.RestoreRBACM
}
return SuccessStatus()
}

func (m *MockServer) CreatePrivilegeGroup(ctx context.Context, req *milvuspb.CreatePrivilegeGroupRequest) (*commonpb.Status, error) {
f := m.GetInjection(MCreatePrivilegeGroup)
if f != nil {
r, err := f(ctx, req)
return r.(*commonpb.Status), err
}
return SuccessStatus()
}

func (m *MockServer) DropPrivilegeGroup(ctx context.Context, req *milvuspb.DropPrivilegeGroupRequest) (*commonpb.Status, error) {
f := m.GetInjection(MDropPrivilegeGroup)
if f != nil {
r, err := f(ctx, req)
return r.(*commonpb.Status), err
}
return SuccessStatus()
}

func (m *MockServer) ListPrivilegeGroups(ctx context.Context, req *milvuspb.ListPrivilegeGroupsRequest) (*milvuspb.ListPrivilegeGroupsResponse, error) {
f := m.GetInjection(MListPrivilegeGroups)
if f != nil {
r, err := f(ctx, req)
return r.(*milvuspb.ListPrivilegeGroupsResponse), err
}
s, err := SuccessStatus()
return &milvuspb.ListPrivilegeGroupsResponse{Status: s}, err
}

func (m *MockServer) OperatePrivilegeGroupRequest(ctx context.Context, req *milvuspb.OperatePrivilegeGroupRequest) (*commonpb.Status, error) {
f := m.GetInjection(MOperatePrivilegeGroup)
if f != nil {
r, err := f(ctx, req)
return r.(*commonpb.Status), err
}
return SuccessStatus()
}
88 changes: 88 additions & 0 deletions client/rbac.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
"github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
"github.com/milvus-io/milvus-sdk-go/v2/entity"
"github.com/samber/lo"
)

// CreateRole creates a role entity in Milvus.
Expand Down Expand Up @@ -521,3 +522,90 @@ func (c *GrpcClient) RestoreRBAC(ctx context.Context, meta *entity.RBACMeta) err

return handleRespStatus(resp)
}

func (c *GrpcClient) CreatePrivilegeGroup(ctx context.Context, groupName string) error {
if c.Service == nil {
return ErrClientNotReady
}

req := &milvuspb.CreatePrivilegeGroupRequest{
GroupName: groupName,
}

resp, err := c.Service.CreatePrivilegeGroup(ctx, req)
if err != nil {
return err
}

return handleRespStatus(resp)
}

func (c *GrpcClient) DropPrivilegeGroup(ctx context.Context, groupName string) error {
if c.Service == nil {
return ErrClientNotReady
}

req := &milvuspb.DropPrivilegeGroupRequest{
GroupName: groupName,
}

resp, err := c.Service.DropPrivilegeGroup(ctx, req)
if err != nil {
return err
}

return handleRespStatus(resp)
}

func (c *GrpcClient) ListPrivilegeGroups(ctx context.Context) ([]entity.PrivilegeGroup, error) {
PrivilegeGroupList := make([]entity.PrivilegeGroup, 0)
if c.Service == nil {
return PrivilegeGroupList, ErrClientNotReady
}

req := &milvuspb.ListPrivilegeGroupsRequest{}

resp, err := c.Service.ListPrivilegeGroups(ctx, req)
if err != nil {
return PrivilegeGroupList, err
}

if err = handleRespStatus(resp.GetStatus()); err != nil {
return PrivilegeGroupList, err
}

results := resp.GetPrivilegeGroups()

if len(results) == 0 {
return PrivilegeGroupList, nil
}

for _, pg := range results {
PrivilegeGroup := entity.PrivilegeGroup{
GroupName: pg.GroupName,
Privileges: lo.Map(pg.Privileges, func(p *milvuspb.PrivilegeEntity, _ int) string {
return p.Name
}),
}
PrivilegeGroupList = append(PrivilegeGroupList, PrivilegeGroup)
}

return PrivilegeGroupList, nil
}

func (c *GrpcClient) OperatePrivilegeGroup(ctx context.Context, groupName string, privileges []string) error {
if c.Service == nil {
return ErrClientNotReady
}

req := &milvuspb.DropPrivilegeGroupRequest{
GroupName: groupName,
}

resp, err := c.Service.DropPrivilegeGroup(ctx, req)
if err != nil {
return err
}

return handleRespStatus(resp)
}
5 changes: 5 additions & 0 deletions entity/rbac.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,8 @@ type RBACMeta struct {
Roles []*Role
RoleGrants []*RoleGrants
}

type PrivilegeGroup struct {
GroupName string
Privileges []string
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ require (
github.com/go-faker/faker/v4 v4.1.0
github.com/golang/protobuf v1.5.2
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240909041258-8f8ca67816cd
github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20241108105827-266fb751b620
github.com/stretchr/testify v1.8.1
github.com/tidwall/gjson v1.14.4
github.com/x448/float16 v0.8.4
Expand Down
11 changes: 2 additions & 9 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -157,12 +157,8 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k
github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240407081710-6c95f3065923 h1:95AQHE3LbCrbegdFZ+lfVNuPYnRgQDVEXHJQkk+3jj8=
github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240407081710-6c95f3065923/go.mod h1:1OIl0v5PQeNxIJhCvY+K55CBUOYDZevw9g9380u1Wek=
github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240909041258-8f8ca67816cd h1:x0b0+foTe23sKcVFseR1DE8+BB08EH6ViiRHaz8PEik=
github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240909041258-8f8ca67816cd/go.mod h1:/6UT4zZl6awVeXLeE7UGDWZvXj3IWkRsh3mqsn0DiAs=
github.com/milvus-io/milvus-proto/go-api/v2 v2.4.10-0.20240819025435-512e3b98866a h1:0B/8Fo66D8Aa23Il0yrQvg1KKz92tE/BJ5BvkUxxAAk=
github.com/milvus-io/milvus-proto/go-api/v2 v2.4.10-0.20240819025435-512e3b98866a/go.mod h1:1OIl0v5PQeNxIJhCvY+K55CBUOYDZevw9g9380u1Wek=
github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20241108105827-266fb751b620 h1:0IWUDtDloift7cQHalhdjuVkL/3qSeiXFqR7MofZBkg=
github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20241108105827-266fb751b620/go.mod h1:/6UT4zZl6awVeXLeE7UGDWZvXj3IWkRsh3mqsn0DiAs=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
Expand Down Expand Up @@ -293,7 +289,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
Expand Down Expand Up @@ -336,9 +331,7 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
Expand Down
Loading

0 comments on commit d472ccd

Please sign in to comment.