@@ -19,6 +19,8 @@ import {
1919 DataAction ,
2020 DataPermission ,
2121 GroupAssignment ,
22+ GroupsAction ,
23+ GroupsPermission ,
2224 NodesAction ,
2325 NodesPermission ,
2426 Permission ,
@@ -67,6 +69,8 @@ export class PermissionGuards {
6769 'read_data' ,
6870 'update_data'
6971 ) ;
72+ static isGroups = ( permission : Permission ) : permission is GroupsPermission =>
73+ PermissionGuards . includes < GroupsAction > ( permission , 'read_groups' , 'assign_and_revoke_groups' ) ;
7074 static isNodes = ( permission : Permission ) : permission is NodesPermission =>
7175 PermissionGuards . includes < NodesAction > ( permission , 'read_nodes' ) ;
7276 static isRoles = ( permission : Permission ) : permission is RolesPermission =>
@@ -129,6 +133,11 @@ export class Map {
129133 data : permission ,
130134 action,
131135 } ) ) ;
136+ } else if ( PermissionGuards . isGroups ( permission ) ) {
137+ return Array . from ( permission . actions ) . map ( ( action ) => ( {
138+ groups : { group : permission . groupID , groupType : permission . groupType } ,
139+ action,
140+ } ) ) ;
132141 } else if ( PermissionGuards . isNodes ( permission ) ) {
133142 return Array . from ( permission . actions ) . map ( ( action ) => ( {
134143 nodes : permission ,
@@ -207,6 +216,7 @@ class PermissionsMapping {
207216 cluster : { } ,
208217 collections : { } ,
209218 data : { } ,
219+ groups : { } ,
210220 nodes : { } ,
211221 roles : { } ,
212222 tenants : { } ,
@@ -230,6 +240,7 @@ class PermissionsMapping {
230240 clusterPermissions : Object . values ( this . mappings . cluster ) ,
231241 collectionsPermissions : Object . values ( this . mappings . collections ) ,
232242 dataPermissions : Object . values ( this . mappings . data ) ,
243+ groupsPermissions : Object . values ( this . mappings . groups ) ,
233244 nodesPermissions : Object . values ( this . mappings . nodes ) ,
234245 rolesPermissions : Object . values ( this . mappings . roles ) ,
235246 tenantsPermissions : Object . values ( this . mappings . tenants ) ,
@@ -286,6 +297,18 @@ class PermissionsMapping {
286297 }
287298 } ;
288299
300+ private groups = ( permission : WeaviatePermission ) => {
301+ if ( permission . groups !== undefined ) {
302+ const { group, groupType } = permission . groups ;
303+ if ( group === undefined ) throw new Error ( 'Group permission missing groupID' ) ;
304+ if ( groupType === undefined ) throw new Error ( 'Group permission missing groupType' ) ;
305+ const key = `${ groupType } #${ group } ` ;
306+ if ( this . mappings . groups [ key ] === undefined )
307+ this . mappings . groups [ key ] = { groupType, groupID : group , actions : [ ] } ;
308+ this . mappings . groups [ key ] . actions . push ( permission . action as GroupsAction ) ;
309+ }
310+ } ;
311+
289312 private nodes = ( permission : WeaviatePermission ) => {
290313 if ( permission . nodes !== undefined ) {
291314 let { collection } = permission . nodes ;
@@ -337,6 +360,7 @@ class PermissionsMapping {
337360 this . cluster ( permission ) ;
338361 this . collections ( permission ) ;
339362 this . data ( permission ) ;
363+ this . groups ( permission ) ;
340364 this . nodes ( permission ) ;
341365 this . roles ( permission ) ;
342366 this . tenants ( permission ) ;
@@ -350,6 +374,7 @@ type PermissionMappings = {
350374 cluster : Record < string , ClusterPermission > ;
351375 collections : Record < string , CollectionsPermission > ;
352376 data : Record < string , DataPermission > ;
377+ groups : Record < string , GroupsPermission > ;
353378 nodes : Record < string , NodesPermission > ;
354379 roles : Record < string , RolesPermission > ;
355380 tenants : Record < string , TenantsPermission > ;
0 commit comments