@@ -22,6 +22,7 @@ import (
22
22
"github.com/samber/lo"
23
23
24
24
"github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
25
+ "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
25
26
"github.com/milvus-io/milvus/pkg/common"
26
27
"github.com/milvus-io/milvus/pkg/util/typeutil"
27
28
)
@@ -292,6 +293,124 @@ var (
292
293
}
293
294
)
294
295
296
+ // rbac v2 uses privilege level to group privileges rather than object type
297
+ var (
298
+ CollectionReadOnlyPrivileges = ConvertPrivileges ([]string {
299
+ commonpb .ObjectPrivilege_PrivilegeQuery .String (),
300
+ commonpb .ObjectPrivilege_PrivilegeSearch .String (),
301
+ commonpb .ObjectPrivilege_PrivilegeIndexDetail .String (),
302
+ commonpb .ObjectPrivilege_PrivilegeGetFlushState .String (),
303
+ commonpb .ObjectPrivilege_PrivilegeGetLoadState .String (),
304
+ commonpb .ObjectPrivilege_PrivilegeGetLoadingProgress .String (),
305
+ commonpb .ObjectPrivilege_PrivilegeHasPartition .String (),
306
+ commonpb .ObjectPrivilege_PrivilegeShowPartitions .String (),
307
+ commonpb .ObjectPrivilege_PrivilegeDescribeCollection .String (),
308
+ commonpb .ObjectPrivilege_PrivilegeDescribeAlias .String (),
309
+ commonpb .ObjectPrivilege_PrivilegeGetStatistics .String (),
310
+ commonpb .ObjectPrivilege_PrivilegeListAliases .String (),
311
+ })
312
+
313
+ CollectionReadWritePrivileges = append (CollectionReadOnlyPrivileges ,
314
+ ConvertPrivileges ([]string {
315
+ commonpb .ObjectPrivilege_PrivilegeLoad .String (),
316
+ commonpb .ObjectPrivilege_PrivilegeRelease .String (),
317
+ commonpb .ObjectPrivilege_PrivilegeInsert .String (),
318
+ commonpb .ObjectPrivilege_PrivilegeDelete .String (),
319
+ commonpb .ObjectPrivilege_PrivilegeUpsert .String (),
320
+ commonpb .ObjectPrivilege_PrivilegeImport .String (),
321
+ commonpb .ObjectPrivilege_PrivilegeFlush .String (),
322
+ commonpb .ObjectPrivilege_PrivilegeCompaction .String (),
323
+ commonpb .ObjectPrivilege_PrivilegeLoadBalance .String (),
324
+ commonpb .ObjectPrivilege_PrivilegeCreateIndex .String (),
325
+ commonpb .ObjectPrivilege_PrivilegeDropIndex .String (),
326
+ commonpb .ObjectPrivilege_PrivilegeCreatePartition .String (),
327
+ commonpb .ObjectPrivilege_PrivilegeDropPartition .String (),
328
+ })... ,
329
+ )
330
+
331
+ CollectionAdminPrivileges = append (CollectionReadWritePrivileges ,
332
+ ConvertPrivileges ([]string {
333
+ commonpb .ObjectPrivilege_PrivilegeCreateAlias .String (),
334
+ commonpb .ObjectPrivilege_PrivilegeDropAlias .String (),
335
+ })... ,
336
+ )
337
+
338
+ DatabaseReadOnlyPrivileges = ConvertPrivileges ([]string {
339
+ commonpb .ObjectPrivilege_PrivilegeShowCollections .String (),
340
+ commonpb .ObjectPrivilege_PrivilegeDescribeDatabase .String (),
341
+ })
342
+
343
+ DatabaseReadWritePrivileges = append (DatabaseReadOnlyPrivileges ,
344
+ ConvertPrivileges ([]string {
345
+ commonpb .ObjectPrivilege_PrivilegeAlterDatabase .String (),
346
+ })... ,
347
+ )
348
+
349
+ DatabaseAdminPrivileges = append (DatabaseReadWritePrivileges ,
350
+ ConvertPrivileges ([]string {
351
+ commonpb .ObjectPrivilege_PrivilegeCreateCollection .String (),
352
+ commonpb .ObjectPrivilege_PrivilegeDropCollection .String (),
353
+ })... ,
354
+ )
355
+
356
+ ClusterReadOnlyPrivileges = ConvertPrivileges ([]string {
357
+ commonpb .ObjectPrivilege_PrivilegeListDatabases .String (),
358
+ commonpb .ObjectPrivilege_PrivilegeSelectOwnership .String (),
359
+ commonpb .ObjectPrivilege_PrivilegeSelectUser .String (),
360
+ commonpb .ObjectPrivilege_PrivilegeDescribeResourceGroup .String (),
361
+ commonpb .ObjectPrivilege_PrivilegeListResourceGroups .String (),
362
+ commonpb .ObjectPrivilege_PrivilegeListPrivilegeGroups .String (),
363
+ })
364
+
365
+ ClusterReadWritePrivileges = append (ClusterReadOnlyPrivileges ,
366
+ ConvertPrivileges ([]string {
367
+ commonpb .ObjectPrivilege_PrivilegeFlushAll .String (),
368
+ commonpb .ObjectPrivilege_PrivilegeTransferNode .String (),
369
+ commonpb .ObjectPrivilege_PrivilegeTransferReplica .String (),
370
+ commonpb .ObjectPrivilege_PrivilegeUpdateResourceGroups .String (),
371
+ })... ,
372
+ )
373
+
374
+ ClusterAdminPrivileges = append (ClusterReadWritePrivileges ,
375
+ ConvertPrivileges ([]string {
376
+ commonpb .ObjectPrivilege_PrivilegeBackupRBAC .String (),
377
+ commonpb .ObjectPrivilege_PrivilegeRestoreRBAC .String (),
378
+ commonpb .ObjectPrivilege_PrivilegeCreateDatabase .String (),
379
+ commonpb .ObjectPrivilege_PrivilegeDropDatabase .String (),
380
+ commonpb .ObjectPrivilege_PrivilegeCreateOwnership .String (),
381
+ commonpb .ObjectPrivilege_PrivilegeDropOwnership .String (),
382
+ commonpb .ObjectPrivilege_PrivilegeManageOwnership .String (),
383
+ commonpb .ObjectPrivilege_PrivilegeCreateResourceGroup .String (),
384
+ commonpb .ObjectPrivilege_PrivilegeDropResourceGroup .String (),
385
+ commonpb .ObjectPrivilege_PrivilegeUpdateUser .String (),
386
+ commonpb .ObjectPrivilege_PrivilegeRenameCollection .String (),
387
+ commonpb .ObjectPrivilege_PrivilegeCreatePrivilegeGroup .String (),
388
+ commonpb .ObjectPrivilege_PrivilegeDropPrivilegeGroup .String (),
389
+ commonpb .ObjectPrivilege_PrivilegeOperatePrivilegeGroup .String (),
390
+ })... ,
391
+ )
392
+ )
393
+
394
+ // ConvertPrivileges converts each privilege from metastore format to API format.
395
+ func ConvertPrivileges (privileges []string ) []string {
396
+ return lo .Map (privileges , func (name string , _ int ) string {
397
+ return MetaStore2API (name )
398
+ })
399
+ }
400
+
401
+ func GetPrivilegeLevel (privilege string ) string {
402
+ if lo .Contains (ClusterAdminPrivileges , privilege ) {
403
+ return milvuspb .PrivilegeLevel_Cluster .String ()
404
+ }
405
+ if lo .Contains (DatabaseAdminPrivileges , privilege ) {
406
+ return milvuspb .PrivilegeLevel_Database .String ()
407
+ }
408
+ if lo .Contains (CollectionAdminPrivileges , privilege ) {
409
+ return milvuspb .PrivilegeLevel_Collection .String ()
410
+ }
411
+ return ""
412
+ }
413
+
295
414
// StringSet convert array to map for conveniently check if the array contains an element
296
415
func StringSet (strings []string ) map [string ]struct {} {
297
416
stringsMap := make (map [string ]struct {})
0 commit comments