mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
feat(core): permissions service
CB-103
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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,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
|
||||
}
|
||||
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user