feat(core): permissions service

CB-103
This commit is contained in:
Wroud
2020-05-07 18:16:29 +03:00
parent a6b5e43146
commit d8bf03dd70
6 changed files with 85 additions and 2 deletions
+4 -1
View File
@@ -18,6 +18,7 @@ import { ThemeService } from '@dbeaver/core/theming';
import { SessionExpireService } from './dialogs';
import { LocalizationService } from './localization';
import { PermissionsService } from './root';
/**
* AppBootstrap.init() will be executed between first and second phase of App initialization,
@@ -38,7 +39,8 @@ export class AppBootstrap {
private navigationTreeContextMenuService: NavigationTreeContextMenuService,
private nodesManagerService: NodesManagerService,
private navigationTabsService: NavigationTabsService,
private connectionSchemaManagerService: ConnectionSchemaManagerService) {
private connectionSchemaManagerService: ConnectionSchemaManagerService,
private permissionsService: PermissionsService) {
}
async init() {
@@ -47,6 +49,7 @@ export class AppBootstrap {
await this.localizationService.init();
await this.themeService.init();
await this.permissionsService.update();
this.connectionSchemaManagerService.registerCallbacks();
this.navigationTreeContextMenuService.registerMenuItems();
+2 -1
View File
@@ -20,7 +20,7 @@ import { LocalizationService } from '@dbeaver/core/localization';
import { PluginManagerService } from '@dbeaver/core/plugin';
import { ProductManagerService, ProductSettingsService } from '@dbeaver/core/product';
import {
SessionService, ServerService, SessionSettingsService, ServerSettingsService
SessionService, ServerService, SessionSettingsService, ServerSettingsService, PermissionsService
} from '@dbeaver/core/root';
import { EnvironmentService, GraphQLService } from '@dbeaver/core/sdk';
import { LocalStorageSaveService, SettingsService } from '@dbeaver/core/settings';
@@ -40,6 +40,7 @@ export const coreManifest: PluginManifest = {
PluginManagerService,
ServerSettingsService,
SessionSettingsService,
PermissionsService,
CoreSettingsService,
CommonDialogService,
SessionExpireService,
@@ -0,0 +1,56 @@
/*
* cloudbeaver - Cloud Database Manager
* Copyright (C) 2020 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { injectable } from '@dbeaver/core/di';
import { GraphQLService, CachedResource } from '@dbeaver/core/sdk';
type PermissionsMetadata = {
loaded: boolean;
}
@injectable()
export class PermissionsService {
private permissions = new CachedResource(
new Map(),
this.refreshAsync.bind(this),
(_, { loaded }) => loaded
);
constructor(
private graphQLService: GraphQLService,
) { }
has(id: string): boolean {
return this.permissions.data.has(id);
}
async hasAsync(id: string): Promise<boolean> {
const permissions = await this.permissions.load();
return permissions.has(id);
}
async update() {
await this.permissions.refresh();
}
private async refreshAsync(
data: Map<string, string>,
metadata: PermissionsMetadata
): Promise<Map<string, string>> {
const { permissions } = await this.graphQLService.gql.sessionPermissions();
data.clear();
for (const permission of permissions) {
data.set(permission, permission);
}
metadata.loaded = true;
return data;
}
}
+1
View File
@@ -1,4 +1,5 @@
export * from './SessionService';
export * from './ServerService';
export * from './PermissionsService';
export * from './ServerSettingsService';
export * from './SessionSettingsService';
@@ -0,0 +1,3 @@
query sessionPermissions {
permissions: sessionPermissions
}
+19
View File
@@ -1286,6 +1286,12 @@ export type ServerConfigQuery = {
>;
};
export type SessionPermissionsQueryVariables = {};
export type SessionPermissionsQuery = {
permissions: Query["sessionPermissions"];
};
export type SessionStateQueryVariables = {};
export type SessionStateQuery = {
@@ -1929,6 +1935,11 @@ export const ServerConfigDocument = gql`
}
}
`;
export const SessionPermissionsDocument = gql`
query sessionPermissions {
permissions: sessionPermissions
}
`;
export const SessionStateDocument = gql`
query sessionState {
sessionState {
@@ -2238,6 +2249,14 @@ export function getSdk(client: GraphQLClient) {
variables,
);
},
sessionPermissions(
variables?: SessionPermissionsQueryVariables,
): Promise<SessionPermissionsQuery> {
return client.request<SessionPermissionsQuery>(
print(SessionPermissionsDocument),
variables,
);
},
sessionState(
variables?: SessionStateQueryVariables,
): Promise<SessionStateQuery> {