77} from '../openapi/types.js' ;
88import { User , UserDB } from '../users/types.js' ;
99import {
10+ AliasAction ,
11+ AliasPermission ,
1012 BackupsAction ,
1113 BackupsPermission ,
1214 ClusterAction ,
@@ -35,6 +37,14 @@ const ZERO_TIME = '0001-01-01T00:00:00.000Z';
3537export class PermissionGuards {
3638 private static includes = < A extends string > ( permission : Permission , ...actions : A [ ] ) : boolean =>
3739 actions . filter ( ( a ) => Array . from < string > ( permission . actions ) . includes ( a ) ) . length > 0 ;
40+ static isAlias = ( permission : Permission ) : permission is AliasPermission =>
41+ PermissionGuards . includes < AliasAction > (
42+ permission ,
43+ 'create_aliases' ,
44+ 'read_aliases' ,
45+ 'update_aliases' ,
46+ 'delete_aliases' ,
47+ ) ;
3848 static isBackups = ( permission : Permission ) : permission is BackupsPermission =>
3949 PermissionGuards . includes < BackupsAction > ( permission , 'manage_backups' ) ;
4050 static isCluster = ( permission : Permission ) : permission is ClusterPermission =>
@@ -94,6 +104,12 @@ export class Map {
94104 ! Array . isArray ( permissions ) ? [ permissions ] : permissions . flat ( 2 ) ;
95105
96106 static permissionToWeaviate = ( permission : Permission ) : WeaviatePermission [ ] => {
107+ if ( PermissionGuards . isAlias ( permission ) ) {
108+ return Array . from ( permission . actions ) . map ( ( action ) => ( {
109+ aliases : permission ,
110+ action,
111+ } ) ) ;
112+ }
97113 if ( PermissionGuards . isBackups ( permission ) ) {
98114 return Array . from ( permission . actions ) . map ( ( action ) => ( {
99115 backups : permission ,
@@ -178,6 +194,7 @@ class PermissionsMapping {
178194
179195 private constructor ( role : WeaviateRole ) {
180196 this . mappings = {
197+ aliases : { } ,
181198 backups : { } ,
182199 cluster : { } ,
183200 collections : { } ,
@@ -200,6 +217,7 @@ class PermissionsMapping {
200217 }
201218 return {
202219 name : this . role . name ,
220+ aliasPermissions : Object . values ( this . mappings . aliases ) ,
203221 backupsPermissions : Object . values ( this . mappings . backups ) ,
204222 clusterPermissions : Object . values ( this . mappings . cluster ) ,
205223 collectionsPermissions : Object . values ( this . mappings . collections ) ,
@@ -211,6 +229,15 @@ class PermissionsMapping {
211229 } ;
212230 } ;
213231
232+ private aliases = ( permission : WeaviatePermission ) => {
233+ if ( permission . aliases !== undefined ) {
234+ const key = permission . aliases . alias ;
235+ if ( key === undefined ) throw new Error ( 'Alias permission missing an alias' ) ;
236+ if ( this . mappings . aliases [ key ] === undefined ) this . mappings . aliases [ key ] = { alias : key , actions : [ ] } ;
237+ this . mappings . aliases [ key ] . actions . push ( permission . action as AliasAction ) ;
238+ }
239+ }
240+
214241 private backups = ( permission : WeaviatePermission ) => {
215242 if ( permission . backups !== undefined ) {
216243 const key = permission . backups . collection ;
@@ -295,6 +322,7 @@ class PermissionsMapping {
295322 } ;
296323
297324 private permissionFromWeaviate = ( permission : WeaviatePermission ) => {
325+ this . aliases ( permission ) ;
298326 this . backups ( permission ) ;
299327 this . cluster ( permission ) ;
300328 this . collections ( permission ) ;
@@ -307,6 +335,7 @@ class PermissionsMapping {
307335}
308336
309337type PermissionMappings = {
338+ aliases : Record < string , AliasPermission > ;
310339 backups : Record < string , BackupsPermission > ;
311340 cluster : Record < string , ClusterPermission > ;
312341 collections : Record < string , CollectionsPermission > ;
0 commit comments