mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	fix: Make project roles resolve correctly against new environments permissions structure
This commit is contained in:
		
							parent
							
								
									9d4f542f85
								
							
						
					
					
						commit
						d387ac0cbd
					
				| @ -170,6 +170,13 @@ export class AccessStore implements IAccessStore { | |||||||
|             .from<IRole>(T.ROLES); |             .from<IRole>(T.ROLES); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     async getProjectRoles(): Promise<IRole[]> { | ||||||
|  |         return this.db | ||||||
|  |             .select(['id', 'name', 'type', 'description']) | ||||||
|  |             .from<IRole>(T.ROLES) | ||||||
|  |             .andWhere('type', 'project'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     async getRolesForProject(projectId: string): Promise<IRole[]> { |     async getRolesForProject(projectId: string): Promise<IRole[]> { | ||||||
|         return this.db |         return this.db | ||||||
|             .select(['id', 'name', 'type', 'project', 'description']) |             .select(['id', 'name', 'type', 'project', 'description']) | ||||||
| @ -201,11 +208,15 @@ export class AccessStore implements IAccessStore { | |||||||
|             .where('ru.user_id', '=', userId); |             .where('ru.user_id', '=', userId); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async getUserIdsForRole(roleId: number): Promise<number[]> { |     async getUserIdsForRole( | ||||||
|  |         roleId: number, | ||||||
|  |         projectId?: string, | ||||||
|  |     ): Promise<number[]> { | ||||||
|         const rows = await this.db |         const rows = await this.db | ||||||
|             .select(['user_id']) |             .select(['user_id']) | ||||||
|             .from<IRole>(T.ROLE_USER) |             .from<IRole>(T.ROLE_USER) | ||||||
|             .where('role_id', roleId); |             .where('role_id', roleId) | ||||||
|  |             .andWhere('project', projectId); | ||||||
|         return rows.map((r) => r.user_id); |         return rows.map((r) => r.user_id); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -218,6 +218,10 @@ export class AccessService { | |||||||
|         return { role, permissions: rolePerms, users }; |         return { role, permissions: rolePerms, users }; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     async getProjectRoles(): Promise<IRole[]> { | ||||||
|  |         return this.store.getProjectRoles(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     async getRolesForProject(projectId: string): Promise<IRole[]> { |     async getRolesForProject(projectId: string): Promise<IRole[]> { | ||||||
|         return this.store.getRolesForProject(projectId); |         return this.store.getRolesForProject(projectId); | ||||||
|     } |     } | ||||||
| @ -226,8 +230,14 @@ export class AccessService { | |||||||
|         return this.store.getRolesForUserId(userId); |         return this.store.getRolesForUserId(userId); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async getUsersForRole(roleId: number): Promise<IUser[]> { |     async getUsersForRole( | ||||||
|         const userIdList = await this.store.getUserIdsForRole(roleId); |         roleId: number, | ||||||
|  |         projectId?: string, | ||||||
|  |     ): Promise<IUser[]> { | ||||||
|  |         const userIdList = await this.store.getUserIdsForRole( | ||||||
|  |             roleId, | ||||||
|  |             projectId, | ||||||
|  |         ); | ||||||
|         if (userIdList.length > 0) { |         if (userIdList.length > 0) { | ||||||
|             return this.userStore.getAllWithId(userIdList); |             return this.userStore.getAllWithId(userIdList); | ||||||
|         } |         } | ||||||
| @ -238,11 +248,11 @@ export class AccessService { | |||||||
|     async getProjectRoleUsers( |     async getProjectRoleUsers( | ||||||
|         projectId: string, |         projectId: string, | ||||||
|     ): Promise<[IRole[], IUserWithRole[]]> { |     ): Promise<[IRole[], IUserWithRole[]]> { | ||||||
|         const roles = await this.store.getRolesForProject(projectId); |         const roles = await this.store.getProjectRoles(); | ||||||
| 
 | 
 | ||||||
|         const users = await Promise.all( |         const users = await Promise.all( | ||||||
|             roles.map(async (role) => { |             roles.map(async (role) => { | ||||||
|                 const usrs = await this.getUsersForRole(role.id); |                 const usrs = await this.getUsersForRole(role.id, projectId); | ||||||
|                 return usrs.map((u) => ({ ...u, roleId: role.id })); |                 return usrs.map((u) => ({ ...u, roleId: role.id })); | ||||||
|             }), |             }), | ||||||
|         ); |         ); | ||||||
|  | |||||||
| @ -24,10 +24,11 @@ export interface IAccessStore extends Store<IRole, number> { | |||||||
|     getPermissionsForRole(roleId: number): Promise<IUserPermission[]>; |     getPermissionsForRole(roleId: number): Promise<IUserPermission[]>; | ||||||
|     getRoles(): Promise<IRole[]>; |     getRoles(): Promise<IRole[]>; | ||||||
|     getRolesForProject(projectId: string): Promise<IRole[]>; |     getRolesForProject(projectId: string): Promise<IRole[]>; | ||||||
|  |     getProjectRoles(): Promise<IRole[]>; | ||||||
|     getRootRoles(): Promise<IRole[]>; |     getRootRoles(): Promise<IRole[]>; | ||||||
|     removeRolesForProject(projectId: string): Promise<void>; |     removeRolesForProject(projectId: string): Promise<void>; | ||||||
|     getRolesForUserId(userId: number): Promise<IRole[]>; |     getRolesForUserId(userId: number): Promise<IRole[]>; | ||||||
|     getUserIdsForRole(roleId: number): Promise<number[]>; |     getUserIdsForRole(roleId: number, projectId?: string): Promise<number[]>; | ||||||
|     addEnvironmentPermissionsToRole( |     addEnvironmentPermissionsToRole( | ||||||
|         role_id: number, |         role_id: number, | ||||||
|         permissions: IPermission[], |         permissions: IPermission[], | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								src/test/fixtures/fake-access-store.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								src/test/fixtures/fake-access-store.ts
									
									
									
									
										vendored
									
									
								
							| @ -9,6 +9,10 @@ import { | |||||||
| import { IAvailablePermissions, IPermission } from 'lib/types/model'; | import { IAvailablePermissions, IPermission } from 'lib/types/model'; | ||||||
| 
 | 
 | ||||||
| class AccessStoreMock implements IAccessStore { | class AccessStoreMock implements IAccessStore { | ||||||
|  |     getProjectRoles(): Promise<IRole[]> { | ||||||
|  |         throw new Error('Method not implemented.'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     addEnvironmentPermissionsToRole( |     addEnvironmentPermissionsToRole( | ||||||
|         role_id: number, |         role_id: number, | ||||||
|         permissions: IPermission[], |         permissions: IPermission[], | ||||||
| @ -59,7 +63,7 @@ class AccessStoreMock implements IAccessStore { | |||||||
|         return Promise.resolve([]); |         return Promise.resolve([]); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     getUserIdsForRole(roleId: number): Promise<number[]> { |     getUserIdsForRole(roleId: number, projectId: string): Promise<number[]> { | ||||||
|         throw new Error('Method not implemented.'); |         throw new Error('Method not implemented.'); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user