mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	fix: hasPermission should not throw
This commit is contained in:
		
							parent
							
								
									8845c90f57
								
							
						
					
					
						commit
						709d12a1dc
					
				| @ -1,3 +1,4 @@ | ||||
| import { catch } from 'fetch-mock'; | ||||
| import { | ||||
|     AccessStore, | ||||
|     IRole, | ||||
| @ -125,6 +126,7 @@ export class AccessService { | ||||
|             `Checking permission=${permission}, userId=${user.id} projectId=${projectId}`, | ||||
|         ); | ||||
| 
 | ||||
|         try { | ||||
|             const userP = await this.store.getPermissionsForUser(user.id); | ||||
| 
 | ||||
|             return userP | ||||
| @ -135,6 +137,11 @@ export class AccessService { | ||||
|                         p.project === ALL_PROJECTS, | ||||
|                 ) | ||||
|                 .some(p => p.permission === permission || p.permission === ADMIN); | ||||
|         } catch(e) { | ||||
|             this.logger.error(`Error checking permission=${permission}, userId=${user.id} projectId=${projectId}`, e); | ||||
|             return Promise.resolve(false); | ||||
|         } | ||||
|          | ||||
|     } | ||||
| 
 | ||||
|     async getPermissionsForUser(user: User): Promise<IUserPermission[]> { | ||||
|  | ||||
| @ -399,3 +399,22 @@ test.serial('should switch root role for user', async t => { | ||||
|     t.is(roles.length, 1); | ||||
|     t.is(roles[0].name, RoleName.VIEWER); | ||||
| }); | ||||
| 
 | ||||
| test.serial('should not crash if user does not have permission', async t => { | ||||
|     const { userStore } = stores; | ||||
| 
 | ||||
|     const user = await userStore.insert({ | ||||
|         name: 'Some User', | ||||
|         email: 'random55Read@getunleash.io', | ||||
|     }); | ||||
| 
 | ||||
|     await accessService.setUserRootRole(user.id, readRole.id); | ||||
| 
 | ||||
|     const { UPDATE_CONTEXT_FIELD } = permissions; | ||||
|     const hasAccess = await accessService.hasPermission( | ||||
|         user, | ||||
|         UPDATE_CONTEXT_FIELD, | ||||
|     ); | ||||
| 
 | ||||
|     t.false(hasAccess); | ||||
| }); | ||||
|  | ||||
							
								
								
									
										26
									
								
								src/test/e2e/stores/feature-toggle-store.e2e.test.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/test/e2e/stores/feature-toggle-store.e2e.test.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| const test = require('ava'); | ||||
| const dbInit = require('../helpers/database-init'); | ||||
| const getLogger = require('../../fixtures/no-logger'); | ||||
| 
 | ||||
| let stores; | ||||
| let db; | ||||
| let featureToggleStore; | ||||
| 
 | ||||
| test.before(async () => { | ||||
|     db = await dbInit('feature_toggle_store_serial', getLogger); | ||||
|     stores = db.stores; | ||||
|     featureToggleStore = stores.featureToggleStore; | ||||
| }); | ||||
| 
 | ||||
| test.after(async () => { | ||||
|     await db.destroy(); | ||||
| }); | ||||
| 
 | ||||
| test.serial('should not crash for unknown toggle', async t => { | ||||
|     const project = await featureToggleStore.getProjectId( | ||||
|         'missing-toggle-name', | ||||
|     ); | ||||
|     t.is(project, undefined); | ||||
| }); | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user