directus

Форк
0
/
get-accountability-for-role.ts 
54 строки · 1.5 Кб
1
import type { Accountability, SchemaOverview } from '@directus/types';
2
import type { Knex } from 'knex';
3
import { getPermissions } from './get-permissions.js';
4

5
export async function getAccountabilityForRole(
6
	role: null | string,
7
	context: {
8
		accountability: null | Accountability;
9
		schema: SchemaOverview;
10
		database: Knex;
11
	},
12
): Promise<Accountability> {
13
	let generatedAccountability: Accountability | null = context.accountability;
14

15
	if (role === null) {
16
		generatedAccountability = {
17
			role: null,
18
			user: null,
19
			admin: false,
20
			app: false,
21
		};
22

23
		generatedAccountability.permissions = await getPermissions(generatedAccountability, context.schema);
24
	} else if (role === 'system') {
25
		generatedAccountability = {
26
			user: null,
27
			role: null,
28
			admin: true,
29
			app: true,
30
			permissions: [],
31
		};
32
	} else {
33
		const roleInfo = await context.database
34
			.select(['app_access', 'admin_access'])
35
			.from('directus_roles')
36
			.where({ id: role })
37
			.first();
38

39
		if (!roleInfo) {
40
			throw new Error(`Configured role "${role}" isn't a valid role ID or doesn't exist.`);
41
		}
42

43
		generatedAccountability = {
44
			role,
45
			user: null,
46
			admin: roleInfo.admin_access === 1 || roleInfo.admin_access === '1' || roleInfo.admin_access === true,
47
			app: roleInfo.app_access === 1 || roleInfo.app_access === '1' || roleInfo.app_access === true,
48
		};
49

50
		generatedAccountability.permissions = await getPermissions(generatedAccountability, context.schema);
51
	}
52

53
	return generatedAccountability;
54
}
55

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.