milvus/client/milvusclient/rbac_options.go

480 lines
12 KiB
Go

// Licensed to the LF AI & Data foundation under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package milvusclient
import (
"github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
)
type ListUserOption interface {
Request() *milvuspb.ListCredUsersRequest
}
// listUserOption is the struct to build ListCredUsersRequest
// left empty for not attribute needed right now
type listUserOption struct{}
func (opt *listUserOption) Request() *milvuspb.ListCredUsersRequest {
return &milvuspb.ListCredUsersRequest{}
}
func NewListUserOption() *listUserOption {
return &listUserOption{}
}
type DescribeUserOption interface {
Request() *milvuspb.SelectUserRequest
}
type describeUserOption struct {
userName string
}
func (opt *describeUserOption) Request() *milvuspb.SelectUserRequest {
return &milvuspb.SelectUserRequest{
User: &milvuspb.UserEntity{
Name: opt.userName,
},
IncludeRoleInfo: true,
}
}
func NewDescribeUserOption(userName string) *describeUserOption {
return &describeUserOption{
userName: userName,
}
}
type CreateUserOption interface {
Request() *milvuspb.CreateCredentialRequest
}
type createUserOption struct {
userName string
password string
}
func (opt *createUserOption) Request() *milvuspb.CreateCredentialRequest {
return &milvuspb.CreateCredentialRequest{
Username: opt.userName,
Password: opt.password,
}
}
func NewCreateUserOption(userName, password string) *createUserOption {
return &createUserOption{
userName: userName,
password: password,
}
}
type UpdatePasswordOption interface {
Request() *milvuspb.UpdateCredentialRequest
}
type updatePasswordOption struct {
userName string
oldPassword string
newPassword string
}
func (opt *updatePasswordOption) Request() *milvuspb.UpdateCredentialRequest {
return &milvuspb.UpdateCredentialRequest{
Username: opt.userName,
OldPassword: opt.oldPassword,
NewPassword: opt.newPassword,
}
}
func NewUpdatePasswordOption(userName, oldPassword, newPassword string) *updatePasswordOption {
return &updatePasswordOption{
userName: userName,
oldPassword: oldPassword,
newPassword: newPassword,
}
}
type DropUserOption interface {
Request() *milvuspb.DeleteCredentialRequest
}
type dropUserOption struct {
userName string
}
func (opt *dropUserOption) Request() *milvuspb.DeleteCredentialRequest {
return &milvuspb.DeleteCredentialRequest{
Username: opt.userName,
}
}
func NewDropUserOption(userName string) *dropUserOption {
return &dropUserOption{
userName: userName,
}
}
type ListRoleOption interface {
Request() *milvuspb.SelectRoleRequest
}
type listRoleOption struct{}
func (opt *listRoleOption) Request() *milvuspb.SelectRoleRequest {
return &milvuspb.SelectRoleRequest{
IncludeUserInfo: false,
}
}
func NewListRoleOption() *listRoleOption {
return &listRoleOption{}
}
type CreateRoleOption interface {
Request() *milvuspb.CreateRoleRequest
}
type createRoleOption struct {
roleName string
}
func (opt *createRoleOption) Request() *milvuspb.CreateRoleRequest {
return &milvuspb.CreateRoleRequest{
Entity: &milvuspb.RoleEntity{Name: opt.roleName},
}
}
func NewCreateRoleOption(roleName string) *createRoleOption {
return &createRoleOption{
roleName: roleName,
}
}
type GrantRoleOption interface {
Request() *milvuspb.OperateUserRoleRequest
}
type grantRoleOption struct {
roleName string
userName string
}
func (opt *grantRoleOption) Request() *milvuspb.OperateUserRoleRequest {
return &milvuspb.OperateUserRoleRequest{
Username: opt.userName,
RoleName: opt.roleName,
Type: milvuspb.OperateUserRoleType_AddUserToRole,
}
}
func NewGrantRoleOption(userName, roleName string) *grantRoleOption {
return &grantRoleOption{
roleName: roleName,
userName: userName,
}
}
type RevokeRoleOption interface {
Request() *milvuspb.OperateUserRoleRequest
}
type revokeRoleOption struct {
roleName string
userName string
}
func (opt *revokeRoleOption) Request() *milvuspb.OperateUserRoleRequest {
return &milvuspb.OperateUserRoleRequest{
Username: opt.userName,
RoleName: opt.roleName,
Type: milvuspb.OperateUserRoleType_RemoveUserFromRole,
}
}
func NewRevokeRoleOption(userName, roleName string) *revokeRoleOption {
return &revokeRoleOption{
roleName: roleName,
userName: userName,
}
}
type DropRoleOption interface {
Request() *milvuspb.DropRoleRequest
}
type dropDropRoleOption struct {
roleName string
}
func (opt *dropDropRoleOption) Request() *milvuspb.DropRoleRequest {
return &milvuspb.DropRoleRequest{
RoleName: opt.roleName,
}
}
func NewDropRoleOption(roleName string) *dropDropRoleOption {
return &dropDropRoleOption{
roleName: roleName,
}
}
type DescribeRoleOption interface {
Request() *milvuspb.SelectGrantRequest
}
type describeRoleOption struct {
roleName string
}
func (opt *describeRoleOption) Request() *milvuspb.SelectGrantRequest {
return &milvuspb.SelectGrantRequest{
Entity: &milvuspb.GrantEntity{
Role: &milvuspb.RoleEntity{Name: opt.roleName},
},
}
}
func NewDescribeRoleOption(roleName string) *describeRoleOption {
return &describeRoleOption{
roleName: roleName,
}
}
type GrantPrivilegeOption interface {
Request() *milvuspb.OperatePrivilegeRequest
}
type grantPrivilegeOption struct {
roleName string
privilegeName string
objectName string
objectType string
}
func (opt *grantPrivilegeOption) Request() *milvuspb.OperatePrivilegeRequest {
return &milvuspb.OperatePrivilegeRequest{
Entity: &milvuspb.GrantEntity{
Role: &milvuspb.RoleEntity{Name: opt.roleName},
Grantor: &milvuspb.GrantorEntity{
Privilege: &milvuspb.PrivilegeEntity{Name: opt.privilegeName},
},
Object: &milvuspb.ObjectEntity{
Name: opt.objectType,
},
ObjectName: opt.objectName,
},
Type: milvuspb.OperatePrivilegeType_Grant,
}
}
func NewGrantPrivilegeOption(roleName, objectType, privilegeName, objectName string) *grantPrivilegeOption {
return &grantPrivilegeOption{
roleName: roleName,
privilegeName: privilegeName,
objectName: objectName,
objectType: objectType,
}
}
type RevokePrivilegeOption interface {
Request() *milvuspb.OperatePrivilegeRequest
}
type revokePrivilegeOption struct {
roleName string
privilegeName string
objectName string
objectType string
}
func (opt *revokePrivilegeOption) Request() *milvuspb.OperatePrivilegeRequest {
return &milvuspb.OperatePrivilegeRequest{
Entity: &milvuspb.GrantEntity{
Role: &milvuspb.RoleEntity{Name: opt.roleName},
Grantor: &milvuspb.GrantorEntity{
Privilege: &milvuspb.PrivilegeEntity{Name: opt.privilegeName},
},
Object: &milvuspb.ObjectEntity{
Name: opt.objectType,
},
ObjectName: opt.objectName,
},
Type: milvuspb.OperatePrivilegeType_Revoke,
}
}
func NewRevokePrivilegeOption(roleName, objectType, privilegeName, objectName string) *revokePrivilegeOption {
return &revokePrivilegeOption{
roleName: roleName,
privilegeName: privilegeName,
objectName: objectName,
objectType: objectType,
}
}
// GrantV2Option is the interface builds OperatePrivilegeV2Request
type GrantV2Option interface {
Request() *milvuspb.OperatePrivilegeV2Request
}
type grantV2Option struct {
roleName string
privilegeName string
dbName string
collectionName string
}
func (opt *grantV2Option) Request() *milvuspb.OperatePrivilegeV2Request {
return &milvuspb.OperatePrivilegeV2Request{
Role: &milvuspb.RoleEntity{Name: opt.roleName},
Grantor: &milvuspb.GrantorEntity{
Privilege: &milvuspb.PrivilegeEntity{Name: opt.privilegeName},
},
Type: milvuspb.OperatePrivilegeType_Grant,
DbName: opt.dbName,
CollectionName: opt.collectionName,
}
}
func NewGrantV2Option(roleName, privilegeName, dbName, collectionName string) *grantV2Option {
return &grantV2Option{
roleName: roleName,
privilegeName: privilegeName,
dbName: dbName,
collectionName: collectionName,
}
}
// RevokeV2Option is the interface builds OperatePrivilegeV2Request
type RevokeV2Option interface {
Request() *milvuspb.OperatePrivilegeV2Request
}
type revokeV2Option struct {
roleName string
privilegeName string
dbName string
collectionName string
}
func (opt *revokeV2Option) Request() *milvuspb.OperatePrivilegeV2Request {
return &milvuspb.OperatePrivilegeV2Request{
Role: &milvuspb.RoleEntity{Name: opt.roleName},
Grantor: &milvuspb.GrantorEntity{
Privilege: &milvuspb.PrivilegeEntity{Name: opt.privilegeName},
},
Type: milvuspb.OperatePrivilegeType_Revoke,
DbName: opt.dbName,
CollectionName: opt.collectionName,
}
}
func NewRevokeV2Option(roleName, privilegeName, dbName, collectionName string) *revokeV2Option {
return &revokeV2Option{
roleName: roleName,
privilegeName: privilegeName,
dbName: dbName,
collectionName: collectionName,
}
}
// CreatePrivilegeGroupOption is the interface builds CreatePrivilegeGroupRequest
type CreatePrivilegeGroupOption interface {
Request() *milvuspb.CreatePrivilegeGroupRequest
}
type createPrivilegeGroupOption struct {
groupName string
}
func (opt *createPrivilegeGroupOption) Request() *milvuspb.CreatePrivilegeGroupRequest {
return &milvuspb.CreatePrivilegeGroupRequest{
GroupName: opt.groupName,
}
}
func NewCreatePrivilegeGroupOption(groupName string) *createPrivilegeGroupOption {
return &createPrivilegeGroupOption{
groupName: groupName,
}
}
// DropPrivilegeGroupOption is the interface builds DropPrivilegeGroupRequest
type DropPrivilegeGroupOption interface {
Request() *milvuspb.DropPrivilegeGroupRequest
}
type dropPrivilegeGroupOption struct {
groupName string
}
func (opt *dropPrivilegeGroupOption) Request() *milvuspb.DropPrivilegeGroupRequest {
return &milvuspb.DropPrivilegeGroupRequest{
GroupName: opt.groupName,
}
}
func NewDropPrivilegeGroupOption(groupName string) *dropPrivilegeGroupOption {
return &dropPrivilegeGroupOption{
groupName: groupName,
}
}
// ListPrivilegeGroupsOption is the interface builds ListPrivilegeGroupsRequest
type ListPrivilegeGroupsOption interface {
Request() *milvuspb.ListPrivilegeGroupsRequest
}
type listPrivilegeGroupsOption struct{}
func (opt *listPrivilegeGroupsOption) Request() *milvuspb.ListPrivilegeGroupsRequest {
return &milvuspb.ListPrivilegeGroupsRequest{}
}
func NewListPrivilegeGroupsOption() *listPrivilegeGroupsOption {
return &listPrivilegeGroupsOption{}
}
// OperatePrivilegeGroupOption is the interface builds OperatePrivilegeGroupRequest
type OperatePrivilegeGroupOption interface {
Request() *milvuspb.OperatePrivilegeGroupRequest
}
type operatePrivilegeGroupOption struct {
groupName string
privileges []*milvuspb.PrivilegeEntity
operateType milvuspb.OperatePrivilegeGroupType
}
func (opt *operatePrivilegeGroupOption) Request() *milvuspb.OperatePrivilegeGroupRequest {
return &milvuspb.OperatePrivilegeGroupRequest{
GroupName: opt.groupName,
Privileges: opt.privileges,
Type: opt.operateType,
}
}
func NewOperatePrivilegeGroupOption(groupName string, privileges []*milvuspb.PrivilegeEntity, operateType milvuspb.OperatePrivilegeGroupType) *operatePrivilegeGroupOption {
return &operatePrivilegeGroupOption{
groupName: groupName,
privileges: privileges,
operateType: operateType,
}
}